Java 为什么InputStream obj不能直接嵌套到BufferedReader obj中?
OutputStream obj可以直接连接到PrintWriter 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
//两者都可以
新的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