CharArrayWriter是Java中基于可扩容char[]的内存字符写入器,适合动态拼接大量字符;支持多种write()重载、转字符串/数组、写入其他Writer,但线程不安全。

CharArrayWriter 是 Java 中一个简单的字符输出流,它把数据写入内存中的字符数组(内部自动扩容),适合临时拼接、缓存字符串内容,尤其在不需要立即写入文件或网络时很实用。
基本用法:创建、写入、获取结果
CharArrayWriter 内部维护一个 char[],调用 write() 方法会追加字符或字符串,最后用 toCharArray() 或 toString() 获取结果:
- 创建实例:
CharArrayWriter writer = new CharArrayWriter(); - 写入单个字符:
writer.write('A'); - 写入字符串:
writer.write("Hello"); - 写入字符数组片段:
writer.write(charArray, offset, length); - 获取结果:
char[] result = writer.toCharArray();或String s = writer.toString();
配合其他流使用(如 PrintWriter)
CharArrayWriter 常作为底层输出目标,供更高层的写入器(如 PrintWriter)使用,便于格式化输出:
CharArrayWriter cw = new CharArrayWriter();PrintWriter pw = new PrintWriter(cw);pw.println("Name: Alice");pw.printf("Age: %d", 30);pw.close();String output = cw.toString(); // "Name: Alice\nAge: 30"
注意点和常见误区
虽然用法简单,但有几点需留意:
立即学习“Java免费学习笔记(深入)”;
- 它不是线程安全的,多线程并发写入需自行同步
- 内部数组会动态扩容,但不会自动收缩;如需最小化内存占用,可手动调用
reset()清空后重用 - 不建议长期持有大容量 CharArrayWriter 实例,因为 char[] 占用堆内存,且未提供 trimToSize 类方法
- JDK 10+ 中更推荐用 StringBuilder 替代多数场景(性能更好、API 更直观),除非你明确需要 Writer 接口(比如适配已有 OutputStreamWriter/PrintWriter 流程)
替代建议:什么情况下优先选 StringBuilder?
如果只是拼接字符串、无外部 Writer 接口依赖,StringBuilder 更轻量、高效:
StringBuilder sb = new StringBuilder();sb.append('A').append("Hello").append(123);-
char[] arr = sb.toString().toCharArray();(如真需要 char[])
CharArrayWriter 的价值主要在于 IO 抽象体系中的角色定位,而非性能或便捷性。


















