AmazingCounters.com

流的概念与原理

一、概念 

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来实现到字节流的转换。

 

posted @ 2015-12-01 19:52  御史  阅读(539)  评论(0编辑  收藏  举报