几乎所有原始的Java I/O“流”类都有相应的 Reader 和 Writer 类来提供其本身就具备的
Unicode 操作。然而,在某些场合面向字节的 InputStreams 和 OutputStream 才是正
确的解决方案;特别地,java.util.zip 类库就是面向字节的而不是面向字符的。因此,最
明智的做法是尽量尝试使用 Reader 和 Writer,一旦程序代码无法成功编译,我们就会发
现自己不得不使用面向字节的类库。
下面的表展示了在两个继承层次结构中,信息的来源和去处(即数据物理上来自哪里及去向
哪里)之间的对应关系
左
Sources &Sinks:
Java 1.0 class
InputStream
OutputStream
右
Corresponding Java 1.1 class
Reader
adapter:
InputStreamReader
Writer
adapter:
左
FileInputStream
FileOutputStream
StringBufferInputStream
(nocorresponding class)
ByteArrayInputStream
ByteArrayOutputStream
PipedInputStream
PipedOutputStream
右
OutputStreamWriter
FileReader
FileWriter
StringReader
StringWriter
CharArrayReader
CharArrayWriter
PipedReader
PipedWriter
大体上,我们会发现这两个不同的继承层次结构中的接口相似但不完全相同。