Java 为什么InputStream obj不能直接嵌套到BufferedReader obj中?

Java 为什么InputStream obj不能直接嵌套到BufferedReader obj中?,java,api,io,Java,Api,Io,OutputStream obj可以直接连接到PrintWriter obj,例如。, //两者都可以 新的PrintWriter(socket.getOutputStream()); 新的PrintWriter(新的OutputStreamWriter(socket.getOutputStream()); 但对于InputStream obj,它必须通过InputStreamReader obj连接到BufferedReader obj,即, 新的BufferedReader(新的Inp

OutputStream obj可以直接连接到PrintWriter obj,例如。,

//两者都可以
新的PrintWriter(socket.getOutputStream());
新的PrintWriter(新的OutputStreamWriter(socket.getOutputStream());
但对于InputStream obj,它必须通过InputStreamReader obj连接到BufferedReader obj,即,

新的BufferedReader(新的InputStreamReader(socket.getInputStream())//好啊
新的BufferedReader(socket.getInputStream())//不起作用

API设计不一致有什么原因吗?

BufferedReader可能只是在修饰传入的InputReader。BufferedReader接受无法修饰的类(如InputStream)毫无意义。

BufferedReader可能只是修饰传入的InputReader。BufferedReader接受无法修饰的类(如InputStream)是没有意义的。

没有任何不一致性。。。您应该比较
BufferedReader
BufferedWriter
。它们分别用于包装其他
读卡器
s和
写卡器
s


其基本原因是不同类型的
读卡器
写卡器
可能有不同的初始化方式和功能方式,不一定包装
输入流
输出流
。在
BufferedReader
包装
InputStreamReader
的示例中,
InputStreamReader
可以(通常应该)使用
InputStream
字符集进行初始化。当BufferedReader的唯一任务是提供缓冲时,它是否应该为此设置重载?

没有任何不一致性。。。您应该比较
BufferedReader
BufferedWriter
。它们分别用于包装其他
读卡器
s和
写卡器
s


其基本原因是不同类型的
读卡器
写卡器
可能有不同的初始化方式和功能方式,不一定包装
输入流
输出流
。在
BufferedReader
包装
InputStreamReader
的示例中,
InputStreamReader
可以(通常应该)使用
InputStream
字符集进行初始化。当BufferedReader的唯一任务是提供缓冲时,它是否应该有一个重载呢?

当输入和输出流类已经在使用时,Java引入了读写器层次结构(我想是Java 1.1)。因此,使用桥接模式,它们允许您将流类传递到读卡器类中。 此外,对于writer,PritnerWriter直接是与InputStreamReader等效的桥接类。对于BufferedWriter,您也会看到同样的情况
更多信息请阅读

当输入和输出流类已经在使用时,Java引入了读写器层次结构(我想是Java1.1)。因此,使用桥接模式,它们允许您将流类传递到读卡器类中。 此外,对于writer,PritnerWriter直接是与InputStreamReader等效的桥接类。对于BufferedWriter,您也会看到同样的情况
阅读更多信息

那么,这是否意味着除了通过InputStreamReader将InputStream obj连接到BufferedReader之外,还有其他选择?我相信InputStreamReader是读取器和InputStream之间的“桥梁”。阅读下面Fazal的答案。那么这是否意味着除了通过InputStreamReader之外,还有其他选择将InputStream obj连接到BufferedReader?我相信InputStreamReader是读取器和InputStream之间的“桥梁”。阅读Fazal下面的回答。“InputStreamReader可以(通常应该)使用InputStream和字符集进行初始化”,这是正确的,但同样适用于
OutputStreamWriter
PrintWriter
。在创建
OutputStreamWriter
时,应该指定一个字符集,但是
PrintWriter
没有重载。PrintWriter的存在部分是为了包装
Writer
对象(任何类型)。@Matthew Flaschen:IO包中的某些类在字符集方面处理得相当糟糕
PrintWriter
FileReader
是示例。我认为,
PrintWriter
应该只允许包装另一个
Writer
(而不是所有其他重载),并且不应该使用
FileReader
<代码>文件输入流
+
输入流阅读器
。我同意。事实上,有些类完全依赖默认编码,而另一些类则不依赖默认编码,这表明包在一定程度上是不一致的。“InputStreamReader可以(通常应该)用InputStream和Charset进行初始化”这是正确的,但同样适用于
OutputStreamWriter
PrintWriter
。在创建
OutputStreamWriter
时,应该指定一个字符集,但是
PrintWriter
没有重载。PrintWriter的存在部分是为了包装
Writer
对象(任何类型)。@Matthew Flaschen:IO包中的某些类在字符集方面处理得相当糟糕
PrintWriter
FileReader
是示例。我认为,
PrintWriter
应该只允许包装另一个
Writer
(而不是所有其他重载),并且不应该使用
FileReader
<代码>文件输入流
+
输入流阅读器
。我同意。事实上,有些类完全依赖默认编码,而另一些类则不依赖,这证明了包在一定程度上是不一致的 //either is OK new PrintWriter(socket.getOutputStream()); new PrintWriter(new OutputStreamWriter(socket.getOutputStream())); new BufferedReader(new InputStreamReader(socket.getInputStream())); //OK new BufferedReader(socket.getInputStream()); //doesnt work