2

クラスが階層内でどのように編成されているかという点で、文字ストリームとバイト ストリームが 1 対 1 で対応することを期待していました。

FilterReaderand FilterWriter(文字ストリーム) はFilterInputStreamand FilterOutputStream(バイトストリーム) クラスに対応します。

ただし、いくつかの変更に気付きました-

  • BufferedInputStream拡張しますがFilterInputStreamBufferedReader拡張しませんFilterReader

  • BufferedOutputStreamPrintStream両方とも拡張FilterOutputStreamしますが、BufferedWriterPrintWriterは拡張しませんFilterWriter

  • FilterInputStreamandFilterOutputStreamは抽象クラスではありませんが、FilterReaderandFilterWriterは抽象クラスです。

そのような違いを指摘するには偏執的すぎるかどうかはわかりませんが、そのような決定の背後に設計上の理由があるかどうかを知りたいと思っていました.

4

2 に答える 2

0

Input/OutputStreamクラスはすでに Java 1.0 の一部でしたが、クラスReader/Writerは Java 1.1 でのみ追加されました。ただし、言語の変更はどれも、あなたが言及した設計の違いを説明していないようです.

于 2010-05-25T12:11:49.210 に答える
0

その理由は主に歴史的なものだと思います。元のバイト指向クラスは Java の初期に開発されたもので、設計のいくつかの側面は理想的とは言えませんでした。Java 設計者が JDK 1.1 で文字指向クラスを導入したとき、リーダー/ライター API のいくつかの誤りを修正する機会を得ました。しかし、その頃には多くの顧客が Stream API を使用していたため、修正するには遅すぎました。

FilterInputStreamあなたが強調したケースでは、およびFilterOutputStreamクラスをインスタンス化するための、またはそれらをポリモーフィックに使用するための実際のユースケースがないことがわかりました。

于 2010-05-25T12:15:14.000 に答える