CharArrayWriter 是 Java 中将字符数据暂存于内存 char 数组的轻量级输出流,支持自动扩容、多种 write 重载及无异常写入,适用于临时拼接、日志捕获和单元测试,但非线程安全且内存占用需谨慎。

CharArrayWriter 是 Java IO 中一个轻量级的字符输出流,它不写入文件或网络,而是将数据暂存在内存中的 char 数组里。适合临时拼接、缓存或测试场景,比如构建动态字符串、捕获日志输出、模拟 Writer 行为等。
创建并写入数据
直接 new 一个 CharArrayWriter 实例,调用 write() 方法写入字符、字符串或 char 数组:
- 支持
write(int c)、write(String str)、write(char[] buf, int off, int len)等多种重载 - 内部会自动扩容 char 数组,无需手动管理容量
- 写入过程不会抛出 IOException(因为不涉及外部设备)
获取结果内容
写完后,用以下任一方式提取内容:
-
toCharArray():返回当前内容的副本 char 数组 -
toString():返回 String 类型的结果(推荐日常使用) -
reset():清空缓冲区,复用同一个实例
配合其他流使用
它可以作为中间“接收端”,和 InputStreamReader、PrintWriter 等配合:
立即学习“Java免费学习笔记(深入)”;
- 传给
PrintWriter(CharArrayWriter),再用 println 写入更方便 - 作为自定义 writer 的目标,用于单元测试中捕获输出
- 与 StringReader 配合,实现内存中字符流的闭环处理(写入 → 读取)
注意点和替代建议
虽然简单易用,但要注意:
- 数据始终保存在堆内存中,大数据量可能引发内存压力
- 不是线程安全的,多线程写入需自行同步
- Java 8+ 更常用
StringBuilder直接拼接字符串,性能更高、语义更清晰 - 若需流式处理且兼容标准 Writer 接口,才优先选 CharArrayWriter


















