15.4 输入输出流体系 15.4.1 处理流的用法
15.4 输入输出流体系
节点流存在差异 代码不统一
上一节介绍了输入输出流的4个抽象基类,并介绍了4个访问文件的节点流的用法。通过上面示例程序不难发现,4个基类使用起来有些烦琐。
处理流屏蔽底层节点流的区别 代码统一
如果希望简化编程,这就需要借助于处理流了。
图15.7显示了处理流的功能,处理流可以隐藏底层设备上节点流的差异,并对外提供更加方便的输入输出方法,让程序员只需关心高级流的操作。
使用处理流的典型思路
使用处理流时的典型思路是,使用处理流来包装节点流,程序通过处理流来执行输入/输岀功能让节点流与底层的I/O
设备、文件交互。
如何区分处理流和节点流
处理流的构造器参数是另一个流
实际识别处理流非常简单,只要流的构造器参数不是一个物理节点,而是已经存在的流,那么这种流就一定是处理流;
节点流构造器参数是物理节点
而所有节点流都是直接以物理IO
节点作为构造器参数的.
使用处理流的优势
关于使用处理流的优势,归纳起来就是两点:
- 对开发人员来说,使用处理流进行输入/输出操作更简单;
- 使用处理流的执行效率更高
程序 使用处理流PrintStream
下面程序使用PrintStream
处理流来包装OutputStream
,使用处理流后的输出流在输出时将更加方便。
1 | import java.io.*; |
上面程序中先定义了一个节点输出流FileOutputStream
,然后程序使用PrintStream
包装了该节点输出流,最后使用PrintStream
来输出字符串、输出对象…
Printstream
的输出功能非常强大,前面程序中一直使用的标准输出System.out
的类型就是PrintStream
。
输出文本内容建议使用PrintStream
由于PrintStream
类的输出功能非常强大,通常如果需要输岀文本内容,都应该将输出流包装成PrintStream
后进行输出。
从前面的代码可以看出,程序使用处理流非常简单,通常只需要在创建处理流时传入一个节点流作为构造器参数即可,这样创建的处理流就是包装了该节点流的处理流。
只需要关闭最上层的处理流
在使用处理流包装了底层节点流之后,关闭输入输出流资源时,只要关闭最上层的处理流即可。关闭最上层的处理流时,系统会自动关闭被该处理流包装的节点流。