日期:2014-05-20  浏览次数:20697 次

J2SE中各种IO流整理

        看完IO这一章之后就剩下一个感觉了:好多stream啊!乱了!

        这一章例子挺多,而且关系也特别乱,反正我学习完这章之后,基本上不知道哪个流是干什么用的了。

        下面我来总结一下,按照节点流和处理流分的方式学习,帮助我们更轻松的掌握各种Stream!

        首先两个基本概念:节点流和处理流。

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

        处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。

        从概念中我们可以看出,处理流都是以节点流为基础的,我们形象的比喻“流”为一根“管道”,那么,节点流就是直接与源链接的管道,而处理流就是套在节点流这根管道之上的管道。

       

        下面我们来看一下常用的节点流和处理流:

        无论是节点流还是处理流,他们的父类都是InputStreamOutputStream Reader Writer这四个抽象类。

常用的节点流

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

       数 组*ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter

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

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

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

 

常用处理流:

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

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

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

 

        看过上面的内容之后,建议大家看看API文档,在文档中我们可以发现,处理流的参数非常特别,都是四种抽象的父类,例如:BufferedInputStream()参数是Inputstream。那么我们就得想了,在节点流中哪些是InputStream类型的?对,就是以InputStream结尾的各个流。

 

        所以,到底哪些处理流对应哪些节点流,现在我们一眼就能看出!将它们简单区分之后发现,也就这几种Stream而已!对照这两张图,你是不是一眼就能看出哪个处理流对应哪些节点流了呢?

     

      

1楼love19890911昨天 20:50
这里需要静下心来,仔细分析,找到关系之后就不乱了!