char和字节流之间的一对一密切关系

时间:2010-05-25 11:40:51

标签: java design-patterns java-io

我希望字符流和字节流之间在类的层次结构中如何组织一对一的对应关系。

FilterReaderFilterWriter(字符流)对应于FilterInputStreamFilterOutputStream(字节流)类。

但是我发现几乎没有变化 -

  • BufferedInputStream延伸FilterInputStream,但BufferedReader不会延伸FilterReader

  • BufferedOutputStreamPrintStream都延伸FilterOutputStream,但BufferedWriterPrintWriter不会延伸FilterWriter

  • FilterInputStreamFilterOutputStream不是抽象类,但FilterReaderFilterWriter是。

我不确定我是否过于偏执地指出这些差异,但只是想知道这种决定背后是否有设计推理。

2 个答案:

答案 0 :(得分:0)

Input/OutputStream类已经是Java 1.0的一部分,而Reader/Writer类仅在Java 1.1中添加。但是,没有任何语言变化似乎可以解释您提到的设计差异。

答案 1 :(得分:0)

我认为原因主要是历史性的。原始的面向字节的类是在Java的早期开发的,并且设计的某些方面不太理想。当Java设计人员在JDK 1.1中引入面向字符的类时,他们借此机会纠正了Reader / Writer API中的一些错误。但到那个时候,许多客户都在使用Stream API,现在纠正它们为时已晚。

在您突出显示的案例中,事实证明没有真正的用例来实例化FilterInputStreamFilterOutputStream类或多态地使用它们。