处理流的用法
处理流的功能,它可以隐藏底层设备上节点流的差异,并对外提供更加方便的输入/输出方法,让程序员只需关心高级流的操作。
使用处理流时的典型思路是,使用处理流来包装节点流,程序通过处理流来执行输入/输出功能,让节点流与底层的I/O设备、文件交互。
实际识别处理流非常简单,只要流的构造器参数不是一个物理节点,而是已经存在的流,那么这种流就一定是处理流;而所有节点流都是直接以物理IO节点作为构造器参数的。
提示: 关于使用处理流的优势,归纳起来就是两点:
①对开发人员来说,使用处理流进行输入/输出操作更简单;
②使用处理流的执行效率更高。
public class PrintStreamTest {
public static void main(String[] args) {
try (
OutputStream out = new FileOutputStream("src\\com\\rrz\\print.txt");
PrintStream print = new PrintStream(out)
) {
print.println("把时间匆匆兑换成了年");
print.println(new PrintStreamTest());
} catch (IOException e) {
e.printStackTrace();
}
}
}
上面程序中的两行粗体字代码先定义了一个节点输出流FileOutputStream,然后程序使用Print Stream包装了该节点输出流,最后使用PrintStream输出字符串、输出对象……PrintStream的输出功能非常强大,前面程序中一直使用的标准输出System.out的类型就是PrintStream。
提示: 由于PrintStream类的输出功能非常强大,通常如果需要输出文本内容,都应该将输出流包装成PrintStream后进行输出。
从前面的代码可以看出,程序使用处理流非常简单,通常只需要在创建处理流时传入一个节点流作为构造器参数即可,这样创建的处理流就是包装了该节点流的处理流。
注意:
在使用处理流包装了底层节点流之后,关闭输入/输出流资源时,只要关闭最上层的处理流即可。关闭最上层的处理流时,系统会自动关闭被该处理流包装的节点流。
上一节:OutputStream 和 Writer
下一节:转换流