Java 中,CharArrayReader 类(java.io.CharArrayReader)能让你以字符流的方式读取字符数组里的内容。
如果你的数据存储在字符数组中,而接收数据的组件只能从 Reader(或 Reader 的子类)获取数据,那么 CharArrayReader 就会成为一个极为便利的工具。你只需把字符数组封装进 CharArrayReader,再将其传递给相应组件就可以了。
以下是一个简单的 CharArrayReader 示例:
package com.hxstrive.java_io; import java.io.CharArrayReader; public class CharArrayReaderExample { public static void main(String[] args) throws Exception { // 定义一个字符数组 char[] chars = {'A', 'B', 'C', 'D', 'E', 'F'}; // 创建 CharArrayReader 实例 try(CharArrayReader charArrayReader = new CharArrayReader(chars)) { int data = charArrayReader.read(); while(data != -1) { System.out.print((char)data); data = charArrayReader.read(); } System.out.println(); } } }
上述示例,创建了一个 CharArrayReader 实例,将字符数组作为参数传递给 CharArrayReader 构造函数。然后,从 CharArrayReader 逐个读取字符并打印到控制台。
除了使用完整的字符数组来创建 CharArrayReader,你还可以基于字符数组的部分内容来创建 CharArrayReader 实例。例如:
package com.hxstrive.java_io; import java.io.CharArrayReader; public class CharArrayReaderExample2 { public static void main(String[] args) throws Exception { // 字符数组 char[] chars = "0123456789".toCharArray(); int offset = 2; // 偏移量 int length = 6; // 长度 try(CharArrayReader charArrayReader = new CharArrayReader(chars, offset, length)) { int data = charArrayReader.read(); while(data != -1) { System.out.print((char)data); data = charArrayReader.read(); } System.out.println(); // 输出:234567 } } }
此示例创建了一个 CharArrayReader,它只读取字符数组中,索引从 2 开始的 6 个字符元素。
当使用完 CharArrayReader 后,可以使用 close() 方法关闭 CharArrayReader,如下所示:
charArrayReader.close();
或者,您也可以使用 Java7 的 try-with-resources 结构自动关闭 CharArrayReader。如下所示:
try(CharArrayReader charArrayReader = new CharArrayReader(chars, offset, length)){ int data = charArrayReader.read(); while(data != -1) { data = charArrayReader.read(); } }
注意,在上述示例中并没有显式调用 close() 方法,因为 try-with-resources 会自动帮我们调用 close() 方法,即使代码出现错误。不过,由于 CharArrayReader 没有使用任何底层系统资源(如文件或网络套接字),因此关闭 CharArrayReader 并不重要,但是养成关闭资源的习惯很重要。