Отсутствие взаимоувязки между символами и байтами - PullRequest
2 голосов
/ 25 мая 2010

Я ожидал взаимно однозначного соответствия между символьными потоками и байтовыми потоками с точки зрения организации классов в их иерархии.

FilterReader и FilterWriter (потоки символов) соответствуют классам FilterInputStream и FilterOutputStream (поток байтов).

Однако я заметил несколько изменений, как -

  • BufferedInputStream расширяет FilterInputStream, но BufferedReader НЕ расширяет FilterReader.

  • BufferedOutputStream и PrintStream оба расширяются FilterOutputStream, но BufferedWriter и PrintWriter НЕ расширяются FilterWriter.

  • FilterInputStream и FilterOutputStream не являются абстрактными классами, но FilterReader и FilterWriter являются

Я не уверен, что я слишком параноидален, чтобы указывать на такие различия, но мне было просто любопытно узнать, было ли в этом решении логическое обоснование.

Ответы [ 2 ]

0 голосов
/ 25 мая 2010

Я думаю, что причина в значительной степени историческая. Первоначальные байтово-ориентированные классы были разработаны в первые дни Java, и некоторые аспекты дизайна были далеко не идеальными. Когда разработчики Java представили символьно-ориентированные классы в JDK 1.1, они воспользовались возможностью, чтобы исправить некоторые ошибки в API Reader / Writer. Но к тому времени многие клиенты использовали API-интерфейсы Stream, и было уже слишком поздно их исправлять.

В выделенных вами случаях оказывается, что нет реальных вариантов использования для создания экземпляров классов FilterInputStream и FilterOutputStream или для их полиморфного использования.

0 голосов
/ 25 мая 2010

Классы Input/OutputStream уже были частью Java 1.0, а классы Reader/Writer были добавлены только в Java 1.1. Однако ни одно из языковых изменений не объясняет упомянутых вами конструктивных различий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...