JAVA IO操作总结——节点流和处理流-阿里云开发者社区

开发者社区> 一叶飘舟> 正文

JAVA IO操作总结——节点流和处理流

简介:
+关注继续查看

JAVA IO操作总结——节点流和处理流

按照流是否直接与特定的地方(如磁盘、内存、设备等)相连,分为节点流和处理流两类。

节点流:可以从或向一个特定的地方(节点)读写数据。如FileReader

处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader。处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。

常用的节点流

父 类 InputStream OutputStream Reader Writer

文 件 *FileInputStream FileOutputStrean FileReader FileWriter 文件进行处理的节点流

数 组 *ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter 对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组)

字符串 *无 无 StringReader StringWriter 对字符串进行处理的节点流

管 道 *PipedInputStream PipedOutputStream PipedReader PipedWriter 对管道进行处理的节点流

常用处理流(关闭处理流使用关闭里面的节点流)

父 类 InputStream OutputStream Reader Writer

缓冲流 *BufferedImputStrean BufferedOutputStream BufferedReader BufferedWriter ----需要父类作为参数构造,增加缓冲功能,避免频繁读写硬盘,可以初始化缓冲数据的大小,由于带了缓冲功能,所以就写数据的时候需要使用flush方法咯

转换流 *InputStreamReader OutputStreamWriter- 要inputStream或OutputStream作为参数,实现从字节流到字符流的转换

数据流 *DataInputStream DataOutputStream -提供将基础数据类型写入到文件中,或者读取出来,为什么要有这个流呢?看这样的分析,如果没有这种流的话,有一个long,本身只占8个字节,如果我要写入到文件,需要转成字符串,然后在转成字符数组,那空间会占用很多,但是有了这种流之后就很方便了,直接将这8个字节写到文件就完了。。是不是既节约了内存空间有让程序写起来更加方便简单了呐。写倒是很简单,但是读取的时候就注意了,根据读取的数据类型,指针会往下移,所以你写的顺序必须要和读的顺序一致才能完成你正确的需求。

*ObjectInputStream ObjectOutputStream

*顺便研究序列化---将对象所在的类型全部转换成二进制,然后写入到介质中去

*transient关键字--修饰成员变量,不写入该成员变量

*Serializable接口--表示接口,怎样实现的呢,在序列化之前,首先判断 (对象 instanceof Serializable)如果返回true则执行序列化,否者抛出异常,并且里面有一个ID,是用来快速查找某个对象的时候使用的

*Externalizable接口--外部化接口;他是Serializable接口的子接口,能手动控制序列化的方式

为什么要用writeUTF()--因为这种方式是按照utf-8来写入的,而默认方式是utf-16只是节省空间而已

--字节流读取中文的问题

*由于java使用的是unicode编码,每一个中文字符是占用两个字节的,所以没有只读出其中一个字节并使用的话当然是乱码咯,虽然普通的英文字符也是两个字节的,但是读取的时候将高8位去掉也能回去正确的英文字符,所以没有问题,所以最好还是使用字符流的方式读取好点

--java.io中专门提供用于打印的流(这类流在写入的时候有自动flush的功能,所以你不需要每打印一个东西都flush一次)--------注意他们也是属于处理流,只不过这里单独列出来分析而已

*PrintStream--继承自-->FilterOutputStream--继承自-->OutputStream,(它的构造函数需要OutputStream对象)

* PrintWriter---继承自-->Writer(它的构造函数需要Writer对象)

System.In====InputStream

System.Out===PrintStream

这种流的print方法不会抛出异常,这是JSP技术中常用的流,如果在JSP页面的打印会抛出异常的话,那JSP也太难写了点!注意理解这样的设计思路

--看这样的代码

PrintStream ps=new PrintStream(new OutputStream("c://..."));

System.setOut(ps);

System.Out.println("jfdajsflkajdf");//这样将不会在打印到命令行窗口,而是指定的PrintStream目标文件里面去

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
从零开始学 Web 之 DOM(四)节点
大家好,这里是「 Daotin的梦呓 」从零开始学 Web 系列教程。此文首发于「 Daotin的梦呓 」公众号,欢迎大家订阅关注。在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目。
1012 0
iOS 11 安全区域适配总结(转)
原文: http://www.jianshu.com/p/efbc8619d56b 导语:本文主要是对iOS 11下APP中tableView内容下移20pt或下移64pt的问题适配的一个总结。
1013 0
java:利用xpath删除xml中的空节点
原始xml内容: 1 2 3 b1 4 5 123 6 7 8 9 10 11 可用下面的代码去掉 、这二个空节点 (注 中间有一个空格,不算空节点) 1 @Test...
1039 0
《SpringBoot揭秘:快速构建微服务体系》—第2章2.3节 了解一点儿JavaConfig
本节书摘来自华章出版社《SpringBoot揭秘:快速构建微服务体系》一书中的第2章,第2.2节了解一点儿JavaConfig,作者王福强,更多章节内容可以访问云栖社区“华章计算机”公众号查看。 2.3 了解一点儿JavaConfig Java 5的推出,加上当年基于纯Java Annotation的依赖注入框架Guice的出现,使得Spring框架及其社区也“顺应民意”,推出并持续完善了基于Java代码和Annotation元信息的依赖关系绑定描述方式,即JavaConfig项目。
1136 0
java之路,IO操作
import java.io.* class FileTest {  public static void main(String[] args)  {   File f = new File("1.
679 0
[喵咪大数据]Hadoop节点添加下线和磁盘扩容操作
Hadoop绝非一个简单程序,集群模式下更是如此,所有的数据都存储在Hadoop中如果操作不当会存在丢失数据的风险,那么怎么在安全的情况,扩容下线维护或者磁盘满了怎么增加空间,就是今天的主要内容了.
232 0
+关注
1635
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载