Java IO整理

Java IO 整理

本文参考
http://blog.csdn.net/yuebinghaoyuan/article/details/7388059/
http://www.cnblogs.com/oubo/archive/2012/01/06/2394638.html
转载请说明出处


Java中的流,可以从不同的角度进行分类。

按照数据流的方向不同可以分为:输入流和输出流。

按照处理数据单位不同可以分为:字节流和字符流。

按照实现功能不同可以分为:节点流和处理流。

 

节点流:直接与数据源相连,读入或读出。

 

处理流:与节点流一块使用,在节点流的基础上,再套接一层,套接在节点流上的就是处理流。

 

JDK提供的流继承了四大类:InputStream(字节输入流),OutputStream(字节输出流),Reader(字符输入流),Writer(字符输出流)。

      Java IO整理_第1张图片

 

输入字节流InputStreamIO

Java IO整理_第2张图片 

1.InputStream 是所有的输入字节流的父类,它是一个抽象类。

2.ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三种基本的介质流,它们分别从Byte 数组、StringBuffer、和本地文件中读取数据。3.PipedInputStream 是从与其它线程共用的管道中读取数据

4.ObjectInputStream 和所有FilterInputStream 的子类都是装饰流(装饰器模式的主角)。


 

输出字节流OutputStream

 Java IO整理_第3张图片       

1.OutputStream 是所有的输出字节流的父类,它是一个抽象类。

2.ByteArrayOutputStream、FileOutputStream 是两种基本的介质流,它们分别向Byte 数组、和本地文件中写入数据。PipedOutputStream 是向与其它线程共用的管道中写入数据,

3.ObjectOutputStream 和所有FilterOutputStream 的子类都是装饰流。


 

字符输入流Reader

 Java IO整理_第4张图片

1.Reader 是所有的输入字符流的父类,它是一个抽象类。

2.CharReader、StringReader 是两种基本的介质流,它们分别将Char 数组、String中读取数据。PipedReader 是从与其它线程共用的管道中读取数据。

3.BufferedReader 很明显就是一个装饰器,它和其子类负责装饰其它Reader 对象。

4.FilterReader 是所有自定义具体装饰流的父类,其子类PushbackReader 对Reader 对象进行装饰,会增加一个行号。

5.InputStreamReader 是一个连接字节流和字符流的桥梁,它将字节流转变为字符流。FileReader 可以说是一个达到此功能、常用的工具类,在其源代码中明显使用了将FileInputStream 转变为Reader 的方法。我们可以从这个类中得到一定的技巧。Reader 中各个类的用途和使用方法基本和InputStream 中的类使用一致。后面会有Reader 与InputStream 的对应关系。

 


 

字符输出流Writer


Java IO整理_第5张图片

1.Writer 是所有的输出字符流的父类,它是一个抽象类。

2.CharArrayWriter、StringWriter 是两种基本的介质流,它们分别向Char 数组、String 中写入数据。PipedWriter 是向与其它线程共用的管道中写入数据,

3.BufferedWriter是一个装饰器为Writer 提供缓冲功能。

4.PrintWriter 和PrintStream 极其类似,功能和使用也非常相似。

5.OutputStreamWriter 是OutputStream 到Writer 转换的桥梁,它的子类FileWriter 其实就是一个实现此功能的具体类(具体可以研究一SourceCode)。功能和使用和OutputStream 极其类似。


 

补充

1.字节/字符数组:ByteArrayInputStream,ByteArrayOutputStream,CharArrayReader,CharArrayWriter是在内存中开辟了一个字节或字符数组。

2.Buffered缓冲流::BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter,是带缓冲区的处理流,缓冲区的作用的主要目的是:避免每次和硬盘打交道,提高数据访问的效率。

3.对象流:ObjectInputStream,ObjectOutputStream,把封装的对象直接输出,而不是一个个在转换成字符串再输出。

4.序列化流:SequenceInputStream。将两个或者多个输入流当成一个输入流依次读取

使用对象流需要实现Serializable接口,否则会报错。而若用transient关键字修饰成员变量,不写入该成员变量,若是引用类型的成员变量为null,值类型的成员变量为0.

 

你可能感兴趣的:(Java基础)