繁体   English   中英

I / O字符流:BufferedReader与printWriter的构造

[英]I/O Character stream: BufferedReader vs printWriter construction

为什么要像这样创建BufferedReader

BufferedReader br = new BufferedReader(new InputStreamReader(System.in))

PrintWriter可以像这样简单地构造

 PrintWriter pw = new PrintWriter(System.out, true);

BufferedReader不能直接从System.in构造,因此它需要InputStreamReader将字节转换为char,这使它易于阅读吗? 但是PrintWriter不需要从char换回字节的包装,这是为什么,Java可以自动进行包装吗? 因为对于一台机器而言,无论如何都是1&0。

因此,它需要InputStreamReader将字节转换为char,这使它易于阅读吗?

不,这是为了表现。 选中此项以查看它们之间的区别。

并且有BufferedWriterBufferedReader ,它们具有相似的功能和构造函数。

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufferedWriter = new BufferedWriter(new PrintWriter(System.out));

首先:-二进制数据: byte[], InputStream, OutputStream -(Unicode)文本: String, char, Reader, Writer -在二进制数据具有某种编码/字符集并且实际上是文本的地方桥接: InputStreamReader, OutputStreamWriter (从/转换为给定或默认字符集)。

现在考虑:

  • System.in是一个InputStream
  • System.outSystem.err是从OutputStream扩展的PrintStream

它们被认为是针对二进制数据的,对于Unix来说这是非常正常且有用的。 对于控制台,却不是那么有用。 但是PrintStream可能是设计上的不幸/错误:它具有文本支持,也可以用于传递Charset。 它是OutputStreamWriter的一半。

因此,将PrintStream视为一个老旧的不干净的类,它可以执行OutputStreamWriter + BufferedWriter工作,但不是Writer

BufferedWriter+OutputStreamWriter具有与PrintStream相同的复杂度(尽管是相反的)。 人们还会看到Scannernew Scanner(System.in) 这不是Reader ,并且对标记化有多余的支持。 PrintStream一样,它具有简洁性的优点,但是由于不需要的开销,绝对更加不干净。 (在Scanner的StackOverflow中提到了很多错误。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM