chararrayreader 是 java 中专为内存 char[] 高效读取设计的轻量级 reader,零 i/o 开销、零拷贝、响应快,适用于模板、测试数据等场景;支持 read()、批量读取、mark/reset 等标准操作,始终 marksupported() 为 true,比 stringreader 更底层,比 inputstreamreader+bytearrayinputstream 更高效。

CharArrayReader 是 Java IO 中专为在内存字符数组上读取数据设计的轻量级字符输入流,无需涉及磁盘或网络 I/O,因此天然高效。它直接操作 char[],避免了字节流与字符流之间的编码转换开销,适合处理临时字符串、模板内容、测试数据等场景。
核心用法:构造与基础读取
只需传入一个 char[] 即可创建实例,支持按字符(read())、按字符数组批量读取(read(char[], int, int))以及跳过(skip())、标记(mark()/reset())等操作:
- 构造时可指定整个数组,也可指定起始位置和长度(CharArrayReader(char[] buf, int offset, int length))
- read() 返回下一个字符(int 类型),读到末尾返回 -1;不阻塞,无异常风险
- 批量读取时,实际读取数 ≤ 请求长度,需检查返回值判断是否读完
配合 String 使用更自然
由于 String 内部以 char[] 存储,常用写法是先调用 string.toCharArray() 构造流:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
CharArrayReader reader = new CharArrayReader(content.toCharArray());
int ch;
while ((ch = reader.read()) != -1) {
System.out.print((char) ch);
}
注意标记(mark)与重置(reset)的限制
CharArrayReader 支持 mark(int readAheadLimit),但该参数被忽略——它始终允许任意位置 reset,只要未关闭且未超出数组范围:
- 调用 mark(0) 或 mark(100) 效果相同,内部记录当前索引即可
- reset() 会回到最近一次 mark 的位置,若未 mark 则重置到开头
- 不支持 markSupported() 返回 false 的情况,它始终返回 true
替代方案对比:何时选它?
相比其他字符流:
- 比 StringReader 更底层、更轻量(StringReader 底层也用 char[],但封装稍多)
- 比 InputStreamReader + ByteArrayInputStream 高效得多——省去字节解码环节
- 不适合大文本(几十 MB 以上),因整个 char[] 常驻内存;此时应考虑 BufferedReader + 文件流
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










