Почему объект InputStream не может быть непосредственно вложен в объект BufferedReader? - PullRequest
1 голос
/ 07 октября 2010

Объект OutputStream может быть напрямую подключен к объекту PrintWriter, например, <pre> //either is OK new PrintWriter(socket.getOutputStream()); new PrintWriter(new OutputStreamWriter(socket.getOutputStream())); Но в случае объекта InputStream он должен быть подключен к объекту BufferedReader через объект InputStreamReader, то есть <pre> new BufferedReader(new InputStreamReader(socket.getInputStream())); //OK new BufferedReader(socket.getInputStream()); //doesnt work Есть ли причина такого несоответствия дизайна API?

Ответы [ 3 ]

3 голосов
/ 07 октября 2010

Нет никаких противоречий ... вы должны сравнивать BufferedReader и BufferedWriter.Они существуют, чтобы обернуть другие Reader s и Writer s соответственно.

Основная причина этого заключается в том, что разные типы Reader s и Writer s могут иметь разные способы инициализации и разныеспособы функционирования, не обязательно обертывающие InputStream или OutputStream вообще.В вашем примере BufferedReader обертка InputStreamReader, InputStreamReader может (и обычно должна) инициализироваться как InputStream, так и Charset.Должна ли BufferedReader иметь перегрузку для этого, когда единственной задачей является обеспечение буферизации?

1 голос
/ 07 октября 2010

Java представила иерархию Reader и Writer (я думаю 1.1), когда классы потока ввода и вывода уже использовались.Поэтому, используя шаблон моста, они позволяют передавать потоковые классы в классы чтения.Далее для писателя также PritnerWriter является непосредственно классом моста, который эквивалентен InputStreamReader.То же самое вы увидите и для BufferedWriter. Для получения дополнительной информации прочитайте http://www.codeguru.com/java/tij/tij0114.shtml

0 голосов
/ 07 октября 2010

BufferedReader, вероятно, просто украшает передаваемый InputReader. Нет смысла для BufferedReader принимать класс, который он не может декорировать, например InputStream.

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