标签:
一、概念
Java中对文件的操作是以流的方式进行的。流是 Java内存中的一组有序数据序列。Java将数据从源(文件、内存、
键盘、网络)读入到内存中,形成了流,然后将这些流还可以写到另外的目的地(文件、内存、控制台、网络),之所
以称为流,是因为这个数据序列在不同时刻所操作的是源的不同部分。
二、分类
流的分类,Java的流分类比较丰富,刚接触的人看了后会感觉很晕。流分类的方式很多:
1、按照输入的方向分,输入流和输出流,输入输出的参照对象是 Java程序。
2、按照处理数据的单位不同分,字节流和字符流,字节流读取的最小单位是一个字节(1byte=8bit),而字符流一次
可以读取一个字符(1char = 2byte = 16bit)。
3、按照功能的不同分,分节点流和处理流(过滤流),节点流是直接从一个源读写数据的流(这个流没有经过包装和修饰),处理流是在对节点流封装的基础上的一种流,FileInputStream是一个节点流,可以直接从文件读取数据,但是
BufferedInputStream可以包装 FileInputStream,使得其有缓冲功能。
其实除了以上三种分类外,还有一些常常听到的一些分类比如:对象流、缓冲流、压缩流、文件流等等。其实都是节点
流和处理流的子分类。当然你也可以创建新的流类型,只要你需要。
Java I/O库的设计原则
• Java的I/O库提供了一个称做链接的机制,可以将一个流与另一个流首尾相接,形成一个流管道的链接。这种机制实际上是一种被称为Decorator(装饰)设计模式的应用。
• 通过流的链接,可以动态的增加流的功能,而这种功能的增加是通过组合一些流的基本功能而动态获取的。
• 我们要获取一个I/O对象,往往需要产生多个I/O对象,这也是Java I/O库不太容易掌握的原因,但在I/O库中Decorator模式的运用,给我们提供了实现上的灵活性。
IO流对象继承关系
三、流分类的关系
不管流的分类是多么的丰富和复杂,其根源来自于四个基本的类。这个四个类的关系如下:
四、字节流和字符流的相互转换
1、从字节流到字符流:InputStreamReader、OutputStreamWriter类可以实现。
2、从字符流到字节流:可以从字符流中获取 char[]数组,转换为 String,然后调用 String的 API函数 getBytes() 获
取到 byte[],然后就可以通过 ByteArrayInputStream、ByteArrayOutputStream来实现到字节流的转换。
标签:
原文地址:http://www.cnblogs.com/baojianfu/p/5011129.html