CharacterStream Classes in Java

2025 年 3 月 28 日 | 阅读 4 分钟

java.io 包提供了字符流类来克服字节流类的局限性,字节流类只能处理 8 位字节,并且不能直接与 Unicode 字符兼容。字符流类用于处理 16 位 Unicode 字符。它们可以对字符、字符数组和字符串执行操作。

然而,字符流类主要用于从源读取字符并将其写入目标。为此,字符流类分为两类:Reader 类和 Writer 类。

Reader 类

Reader 类用于从输入流中读取 16 位字符。但是,它是一个抽象类,无法实例化。但有各种子类继承了 Reader 类并重写了 Reader 类的方法。Reader 类所有方法都会抛出 IOException。Reader 类的子类如下表所示。

序号Class描述
1.BufferedReader此类提供从缓冲区读取字符的方法。
2.CharArrayReader此类提供从字符数组读取字符的方法。
3.FileReader此类提供从文件读取字符的方法。
4.FilterReader此类提供从底层字符输入流读取字符的方法。
5InputStreamReader此类提供将字节转换为字符的方法。
6PipedReader此类提供从连接的管道输出流读取字符的方法。
7StringReader此类提供从字符串读取字符的方法。

Reader 类的方法如下表所示。

序号方法描述
1int read()此方法返回输入中下一个字符的整数表示。如果遇到输入末尾,则返回 -1。
2int read(char buffer[])此方法用于从指定缓冲区读取。它返回成功读取的字符总数。如果遇到输入末尾,则返回 -1。
3int read(char buffer[], int loc, int nChars)此方法用于在指定位置从缓冲区读取指定的 nChars 个字符。它返回成功读取的字符总数。
4void mark(int nchars)此方法用于在读取 nChars 个字符之前标记输入流中的当前位置。
5void reset()此方法用于将输入指针重置到先前设置的标记。
6long skip(long nChars)此方法用于跳过输入流中的指定 nChars 个字符,并返回跳过的字符数。
7boolean ready()此方法返回一个布尔值,如果下一个输入请求已准备好,则为 true。否则,它返回 false。
8void close()此方法用于关闭输入流。但是,如果程序尝试访问输入,则会生成 IOException。

Writer 类

Writer 类用于将 16 位 Unicode 字符写入输出流。Writer 类的方法会生成 IOException。与 Reader 类一样,Writer 类也是一个抽象类,不能实例化;因此,Writer 类的子类用于将字符写入输出流。Writer 类的子类如下表所示。

序号Class描述
1BufferedWriter此类提供将字符写入缓冲区的方法。
2FileWriter此类提供将字符写入文件的方法。
3CharArrayWriter此类提供将字符写入字符数组的方法。
4OutpuStreamWriter此类提供将字节转换为字符的方法。
5PipedWriter此类提供将字符写入管道输出流的方法。
6StringWriter此类提供将字符写入字符串的方法。

为了将字符写入输出流,Write 类提供了各种方法,如下表所示。

序号方法描述
1void write()此方法用于将数据写入输出流。
2void write(int i)此方法用于将单个字符写入输出流。
3Void write(char buffer[])此方法用于将字符数组写入输出流。
4void write(char buffer [],int loc, int nChars)此方法用于从指定位置将 nChars 个字符写入字符数组。
5void close ()此方法用于关闭输出流。但是,如果尝试在关闭流后写入输出流,则会生成 IOException。
6void flush ()此方法用于刷新输出流并写入正在等待的缓冲字符。