Вы на самом деле смотрите на два разных вида потока.
Классы и подклассы Writer
/ Reader
предназначены для чтения / записи символьных данных.Он заботится о преобразовании между внутренним представлением текста UTF-16 в Java и кодировкой символов, используемой снаружи.Класс BufferedReader
добавляет метод readLine()
, который понимает создателей конца строки.
Классы и подклассы InputStream
/ OutputStream
предназначены для чтения и записи байтовых данных без каких-либо предположений окодировки символов, или что данные являются текстовыми.Поскольку он избегает этих предположений, «строка» не имеет четкого значения, и, следовательно, класс BufferedInputStream
не имеет метода readLine()
.
(Кстати, DataInputStream
имеет метод readLine()
,но он устарел, потому что он не работает. Он делает предположения о кодировках и т. д., которые недопустимы на некоторых платформах!)
В вашем конкретном примере код асимметричен, потому что служба HTTP, предназначенная для разговорак асимметрична.Служба ожидает запрос с двоичным содержимым (закодированный с использованием оболочки DataOutputStream
) и доставляет ответ с текстовым содержимым.В этом нет ничего необычного ... или неправильного.
Странность записи «входных данных» на сервер в «выходных данных» - это просто вопрос перспективы.Проще говоря, OutputStream / Writer - это то, что вы «записываете» (т.е. приемник данных), а InputStream или Reader - это то, что вы «читаете» (т.е. источник данных).Так оно и есть, и это совсем не странно, когда ты привыкла к этому.