Ste*_*n C 5

你实际上在看两种不同的流.

Writer/ Reader类和子类是用于读取/写入基于字符的数据.它负责Java内部UTF-16文本表示与外部使用的字符编码之间的转换.该BufferedReader课程增加了readLine()一种了解终端制造者的方法.

InputStream/ OutputStream类和子类是用于读取和写入基于字节的数据,而无需对字符编码的任何假设,或者说数据是文本.由于它避开了这些假设,"线"没有明确的含义,因此BufferedInputStream该类没有readLine()方法.

(顺便提一下,DataInputStream确实有一个readLine()方法,但它已被弃用,因为它已被破坏.它假设编码等在某些平台上无效!)


在您的特定示例中,代码是不对称的,因为它设计用于与之通信的HTTP服务是不对称的.该服务期望具有二进制内容的请求(使用DataOutputStream包装器编码),并提供具有文本内容的响应.这并不是特别不寻常......或者是错误的.

将"输入"写入服务器到"输出"的奇怪之处仅仅是透视问题.简单来说,OutputStream/Writer是您"写入"的东西(即数据接收器),而InputStream或Reader是您"读取"的东西(即数据源).这就是它的方式,一旦你习惯它就一点都不奇怪.