<aside> 💡
字符输出流(Character Output Stream)如何写出数据?
在 Java 中,所有字符输出流的顶层抽象基类是 java.io.Writer。它专门用于写入字符(如 'A', '你', '好'),而不是原始的字节(byte)。
</aside>
Writer 的核心价值正与字符集(如 UTF-8, GBK)相关。
byte),它不知道也不关心这些字节组合起来代表什么字符。如果你想写入 "你好",你需要自己手动将这两个字按特定编码(比如 UTF-8)转换成字节数组 byte[],然后再写入。char)。你直接给它 "你好" 这个字符串,它会在内部持有一个编码器(Encoder),自动根据你指定的(或系统默认的)字符集(如 UTF-8)将这些字符转换为字节,然后再写入到底层的目标(如文件)。简而言之:Writer = OutputStream + 自动编码
Writer 是一个抽象类,我们通常使用它的具体子类来执行写操作。
Writer 的核心方法Writer 类定义了几个关键的 write 方法,它们是所有子类的基础:
write(int c):
int 类型,但它只会写入该 int 值的低 16 位(即一个 char)。writer.write('A'); 或 writer.write(65);write(char[] cbuf):
char[] chars = {'H', 'e', 'l', 'l', 'o'}; writer.write(chars);write(char[] cbuf, int off, int len):
off (offset): 数组的起始索引。len (length): 要写入的字符数量。writer.write(chars, 1, 3); // 会写入 "ell"write(String str):
writer.write("你好,世界!");write(String str, int off, int len):
writer.write("Hello World", 6, 5); // 会写入 "World"我们很少直接用 Writer,而是用它的子类。这里介绍几个最重要的:
OutputStreamWriter:字节流到字符流的桥梁这是最重要的 Writer。它接收一个 OutputStream(字节输出流)作为参数,并充当一个 "转换器"。它从你这里接收字符,按照你指定的编码集将其转换为字节,然后交给 OutputStream 去写入。
构造方法: