包装 InputOutput 流

OutputStreamInputStream 有许多不同的类,每个类都具有独特的功能。通过将流包裹在另一个流中,你可以获得两个流的功能。

你可以多次包装流,只需记下订购。

有用的组合

使用缓冲区时将字符写入文件

File myFile = new File("targetFile.txt");
PrintWriter writer = new PrintWriter(new BufferedOutputStream(new FileOutputStream(myFile)));

在使用缓冲区写入文件之前压缩和加密数据

Cipher cipher = ... // Initialize cipher
File myFile = new File("targetFile.enc");
BufferedOutputStream outputStream = new BufferedOutputStream(new DeflaterOutputStream(new CipherOutputStream(new FileOutputStream(myFile), cipher)));

输入/输出流包装器列表

包装纸 描述
BufferedOutputStream / BufferedInputStream 虽然 OutputStream 一次写入一个字节的数据,但 BufferedOutputStream 以数据块的形式写入数据。这减少了系统调用的数量,从而提高了性能。
DeflaterOutputStream / DeflaterInputStream 执行数据压缩。
InflaterOutputStream / InflaterInputStream 执行数据解压缩。
CipherOutputStream / CipherInputStream 加密/解密数据。
DigestOutputStream / DigestInputStream 生成消息摘要以验证数据完整性。
CheckedOutputStream / CheckedInputStream 生成 CheckSum。CheckSum 是 Message Digest 的一个更简单的版本。
DataOutputStream / DataInputStream 允许写入原始数据类型和字符串。意思是写字节。平台独立。
PrintStream 允许写入原始数据类型和字符串。意思是写字节。平台依赖。
OutputStreamWriter 将 OutputStream 转换为 Writer。OutputStream 处理字节,而 Writers 处理字符
PrintWriter 自动调用 OutputStreamWriter。允许写入原始数据类型和字符串。严格来说,写字符和写字符最好