将 outputstream 转换为 writer 的标准做法是使用 outputstreamwriter。只需在构造器中传入目标 outputstream 并指定字符集(如 standardcharsets.utf_8),即可得到一个基于该字节流进行编码转换的 writer,后续调用其 write() 方法写入的字符串会自动转为字节输出。

如何为 OutputStream 设置正确的字符编码
必须显式指定字符集以避免平台默认编码差异。推荐使用 StandardCharsets.UTF_8 常量,确保跨环境行为一致。

如何关闭 Writer 以释放底层 OutputStream
关闭 Writer 会自动触发底层 OutputStream 的关闭操作,无需单独处理。

import java.io.*;
import java.nio.charset.StandardCharsets;
public class Main {
public static void main(String[] args) throws IOException {
// 模拟一个内存中的字节流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 核心转换:将 OutputStream 包装为 Writer
try (Writer writer = new OutputStreamWriter(baos, StandardCharsets.UTF_8)) {
writer.write("Hello World");
} // 自动关闭 writer,进而关闭 baos
System.out.println(baos.toString());
}
}
预期结果:
控制台打印:Hello World
import java.io.*;
import java.nio.charset.StandardCharsets;
public class Main {
public static void main(String[] args) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 使用 UTF-8 编码
Writer writer = new OutputStreamWriter(baos, StandardCharsets.UTF_8);
writer.write("Test");
writer.close(); // 显式关闭
System.out.println(baos.size() > 0);
}
}
预期结果:
控制台打印:true
import java.io.*;
import java.nio.charset.StandardCharsets;
public class Main {
public static void main(String[] args) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Writer writer = new OutputStreamWriter(baos, StandardCharsets.UTF_8);
writer.write("Data");
// 检查底层流是否被标记为关闭
System.out.println(writer instanceof OutputStreamWriter);
}
}
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











