我希望字符流和字节流之间在类的层次结构中如何组织一对一的对应关系。
FilterReader
和FilterWriter
(字符流)对应于FilterInputStream
和FilterOutputStream
(字节流)类。
但是我发现几乎没有变化 -
BufferedInputStream
延伸FilterInputStream
,但BufferedReader
不会延伸FilterReader
。
BufferedOutputStream
和PrintStream
都延伸FilterOutputStream
,但BufferedWriter
和PrintWriter
不会延伸FilterWriter
。
FilterInputStream
和FilterOutputStream
不是抽象类,但FilterReader
和FilterWriter
是。
我不确定我是否过于偏执地指出这些差异,但只是想知道这种决定背后是否有设计推理。
答案 0 :(得分:0)
Input/OutputStream
类已经是Java 1.0的一部分,而Reader/Writer
类仅在Java 1.1中添加。但是,没有任何语言变化似乎可以解释您提到的设计差异。
答案 1 :(得分:0)
我认为原因主要是历史性的。原始的面向字节的类是在Java的早期开发的,并且设计的某些方面不太理想。当Java设计人员在JDK 1.1中引入面向字符的类时,他们借此机会纠正了Reader / Writer API中的一些错误。但到那个时候,许多客户都在使用Stream API,现在纠正它们为时已晚。
在您突出显示的案例中,事实证明没有真正的用例来实例化FilterInputStream
和FilterOutputStream
类或多态地使用它们。