在 Java IO 体系中,OutputStream 是所有输出流的抽象基类。常见的子类包括 BufferedOutputStream、FileOutputStream 等。通过继承这个类,开发者可以处理文件、网络连接或管道等多种数据目标媒介。
写入字节数据
OutputStream 提供了多种写入方法,最基础的是 write(int)。该方法接收一个 int 类型的参数,实际写入的是该整数的低 8 位(即一个字节)。
OutputStream output = new FileOutputStream("c:\\data\\output-text.txt");
while(hasMoreData()) {
int data = getMoreData();
output.write(data);
}
output.close();
这段代码演示了如何逐字节写入数据。注意,为了保持示例清晰,这里暂时省略了异常捕获逻辑。在实际开发中,IO 操作极易抛出 IOException,必须妥善处理。
除了单字节写入,OutputStream 还支持批量写入:
write(byte[] b): 将字节数组中的所有数据写入流。write(byte[] b, int offset, int length): 从指定偏移量开始,写入指定长度的数据。
部分子类如 DataOutputStream 还扩展了更高级的写入方法,例如 writeBoolean()、writeDouble() 等,方便直接写入基本类型数据。
刷新与关闭
当数据写入流后,并不一定立即落盘。以 FileOutputStream 为例,数据可能暂存在内存缓冲区中。调用 flush() 方法可以将缓冲区内的数据强制刷新到目标媒介(磁盘、网络等),确保数据不丢失。
使用完毕后,必须调用 close() 释放资源。由于 write 方法可能抛出异常,建议将 close 操作放在 finally 块中执行,确保无论是否发生错误都能正确关闭流。
OutputStream output = null;
try {
output = new FileOutputStream("c:\\data\\output-text.txt");
while (hasMoreData()) {
int data = getMoreData();
output.write(data);
}
} finally {
if (output != null) {
output.close();
}
}
这种 try-finally 结构是保证资源安全释放的经典模式。当然,在现代 Java 版本中,也可以考虑使用 try-with-resources 语法来进一步简化代码。

