当编码不再是ASCII时,如果假定字节和字符实质上是一样的,这也会出问题。因此,对应于输入和输出流类层次体系,java提供了一个基本上完整的镜像,用来处理字符而不是字节。
这个镜像体系中,两个抽象超类定义了读/写字符的基本API。
java.io.Reader类指定读取字符的API。
java.io.Writer类执行写字符的API。
对应输入和输出流使用字节的地方,阅读器和书写器会使用Unicode字符。
Reader和Writer最重要的子类是InputStreamReader和OutputStreamWriter类。
InputStreamReader类包含一个底层输入流,可以从中读取原始字节。它根据指定的编码方式,将这些字节转换为Unicode字符。
OutputStreamWriter类从运行中的程序中接收Unicode字符,然后使用指定的编码方式将这些字符转化为字节,再将这些字节写入底层输出流中。
java.io还提供了几个原始阅读器和书写器类,它们可以读取字符而不需要一个底层输入流,这些类包括
FileReader/FileWriter
StringReader/StringWriter
CharArrayReader/CharArrayWriter
前两个类可以处理文件,后四个由java内部使用。
除了构造函数不同,这些类于所有其他阅读器和书写器类一样,都有相同的公共接口。