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

时间:2018-08-24 13:37:35

标签: java

为什么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。

2 个答案:

答案 0 :(得分:1)

  

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

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

BufferedWriterBufferedReader,它们具有相似的函数和构造函数。

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.inInputStream
  • System.outSystem.errPrintStream的{​​{1}}。

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

  

因此,将 PrintStream 看作是一个老旧的不干净的类,它在做PrintStream,但不是OutputStreamWriter + BufferedWriter

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