在 Java 的 I/O 体系中,java.io.CharArrayWriter 类为字符处理提供了独特的功能。作为 Writer 的子类,CharArrayWriter 支持通过 Writer 方法写入字符,并且会自动将这些写入的字符转换为字符数组。
设想这样一个场景:你有一个组件,它仅具备向 Writer 写入字符的能力,但你却需要把这些字符转换为字符数组。在这种情况下,CharArrayWriter 类就显得十分便利。你只需把 CharArrayWriter 实例传递给该组件,待所有字符都完成写入操作后,调用 CharArrayWriter 的 toCharArray() 方法,就能轻松获取所需的字符数组。
以下是一个简单的 CharArrayWriter 示例:
package com.hxstrive.java_io; import java.io.CharArrayWriter; import java.util.Arrays; public class CharArrayWriterExample { public static void main(String[] args) throws Exception { try(CharArrayWriter charArrayWriter = new CharArrayWriter()) { charArrayWriter.write("Hello"); charArrayWriter.write(" "); charArrayWriter.write("world"); // 得到字符数组 char[] chars = charArrayWriter.toCharArray(); System.out.println(Arrays.toString(chars)); //输出: //[H, e, l, l, o, , w, o, r, l, d] } } }
上述示例,首先创建了一个 CharArrayWriter。其次,示例将字符串写入 CharArrayWriter。最后,通过调用 CharArrayWriter 上的 toCharArray() 方法,将写入的字符作为字符数组返回。
CharArrayWriter 有一个构造函数,可让你设置内部用于存储写入字符的字符数组的初始大小。
设置初始大小并不能阻止 CharArrayWriter 存储超过初始大小的字符。如果写入 CharArrayWriter 的字符数超过了初始字符数组的大小,就会创建一个新的字符数组,并将所有字符复制到新数组中。如果我们将数组大小设置的太小,则会频繁创建数组,数组拷贝操作,降低性能。
下面是使用 CharArrayWriter 构造函数设置初始字符数组大小的过程:
int initialSize = 1024; CharArrayWriter charArrayWriter = new CharArrayWriter(initialSize);
上述示例,创建了一个初始字符数组大小为 1024 的 CharArrayWriter。
和其他 IO 类一样,当我们完成向 CharArrayWriter 写入字符后,就可以将其关闭。由于 CharArrayWriter 没有连接到任何底层系统资源(如文件或网络连接),因此关闭它并不重要(不会导致资源泄漏)。
关闭 CharArrayWriter 可通过调用其 close() 方法来完成。如下:
charArrayWriter.close();
您还可以使用 Java 7 中引入的 try-with-resources 结构。如下:
try(CharArrayWriter charArrayWriter = new CharArrayWriter() ){ charArrayWriter.write("data 1"); char[] chars = charArrayWriter.toCharArray(); }
注意,上述示例中并没有手动调用 CharArrayWriter 实例的 close() 方法,完全由 try-with-resources 结构自动调用。