为什么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。
答案 0 :(得分:1)
因此需要InputStreamReader将字节转换为char,这是为了 使其易于阅读?
不,这是为了表现。选中this,以查看它们之间的区别。
有BufferedWriter
和BufferedReader
,它们具有相似的函数和构造函数。
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufferedWriter = new BufferedWriter(new PrintWriter(System.out));
答案 1 :(得分:0)
第一:
-二进制数据:byte[], InputStream, OutputStream
;
-(Unicode)文本:String, char, Reader, Writer
;
-在二进制数据具有某种编码/字符集并且实际上是文本的地方桥接:InputStreamReader, OutputStreamWriter
(从/转换为给定或默认字符集)。
现在考虑:
System.in
是InputStream
。System.out
和System.err
是PrintStream
的{{1}}。它们被认为是针对二进制数据的,对于Unix来说这是非常正常且有用的。对于控制台,却不是那么有用。但是OutputStream
可能是设计失误/错误:它具有文本支持,也用于传递字符集;它是OutputStreamWriter的一半。
因此,将
PrintStream
看作是一个老旧的不干净的类,它在做PrintStream
,但不是OutputStreamWriter + BufferedWriter
。
Writer
与BufferedWriter+OutputStreamWriter
具有相同的复杂度(尽管是相反的)。还会看到扫描仪:PrintStream
。这不是new Scanner(System.in)
,并且对标记化有多余的支持。像Reader
一样,它具有简洁性的优点,但是由于不需要的开销,绝对更加不干净。 (在Scanner的StackOverflow中提到了很多错误。)