Java IO整理

来源:互联网 发布:caxa加工中心编程 编辑:程序博客网 时间:2024/05/19 20:44

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(字符输出流)。

     

 

输入字节流InputStreamIO

 

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

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

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


 

输出字节流OutputStream

        

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

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

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


 

字符输入流Reader

 

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



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.

 

0 0
原创粉丝点击