Java中把不同的数据源与程序间的数据传输都抽象表述为"流"(Stream),java.io包中定义了多种I/O流类型实现数据I/O功能。
I/O流分类:
输入流(Input Stream)和输出流(Output Stream)
节点流(Node Stream)和处理流(Processing Stream)
字符流(Character Stream)和字节流(Byte Stream)
输入流和输出流
按照数据流动的方向,java流可分为输入流(Input Stream)和输出流(Output Stream)
输入流只能从中读取数据,而不能向其写出数据;
输出流则只能向其写出数据,而不能从中读取数据
特例:java.io.RandomAccessFile类
节点流和处理流
根据数据流所关联的是数据源还是其他数据流,可分为节点流(Node Stream)和处理流(Processing Stream)
节点流直接连接到数据源
处理流是对一个已存在的流的连接和封装,通过封装的流的功能调用实现增强的数据读/写功能,处理流并不直接连接到数据源.
字符流和字节流
按传输数据的"颗粒大小"划分,可分为字符流(Character Stream)和字节流(Byte Stream)
字节流以字节为单位进行数据传输,每次传送一个或多个字节;
字符流以字符为单位进行数据传输,每次传送一个或多个字符.
Java I/O主要包括如下几个层次:
1. File(文件特征与管理):用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等。
2. InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。
3. OutputStream(二进制格式操作):抽象类。基于字节的输出操作。是所有输出流的父类。定义了所有输出流都具有的共同特征。
Java中字符是采用Unicode标准,一个字符是16位,即一个字符使用两个字节来表示。为此,JAVA中引入了处理字符的流。
4. Reader(文件格式操作):抽象类,基于字符的输入操作。
5. Writer(文件格式操作):抽象类,基于字符的输出操作。
6. RandomAccessFile(随机文件操作):它的功能丰富,可以从文件的任意位置进行存取(输入输出)操作。
Java命名惯例:
凡是以InputStream或OutputStream结尾的类型均为字节流,凡是以Reader或Writer结尾的均为字符流。
InputStream类层次
OutputStream类层次
Reader类层次
Writer类层次
InputStream ,OutputStream ,Reader,Writer都是抽象类。
更多详细内容和实例代码见:http://fehly.iteye.com/blog/658998