[英]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,这使它易于阅读吗?
不,这是为了表现。 选中此项以查看它们之间的区别。
并且有BufferedWriter
和BufferedReader
,它们具有相似的功能和构造函数。
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.out
和System.err
是从OutputStream
扩展的PrintStream
。 它们被认为是针对二进制数据的,对于Unix来说这是非常正常且有用的。 对于控制台,却不是那么有用。 但是PrintStream
可能是设计上的不幸/错误:它具有文本支持,也可以用于传递Charset。 它是OutputStreamWriter的一半。
因此,将
PrintStream
视为一个老旧的不干净的类,它可以执行OutputStreamWriter + BufferedWriter
工作,但不是Writer
。
BufferedWriter+OutputStreamWriter
具有与PrintStream
相同的复杂度(尽管是相反的)。 人们还会看到Scanner : new Scanner(System.in)
。 这不是Reader
,并且对标记化有多余的支持。 像PrintStream
一样,它具有简洁性的优点,但是由于不需要的开销,绝对更加不干净。 (在Scanner的StackOverflow中提到了很多错误。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.