I/O 字符流:缓冲读取器与打印编写器构造

  • 本文关键字:打印 读取 字符 缓冲 java
  • 更新时间 :
  • 英文 :


为什么BufferedReader这样创建

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

虽然PrintWriter可以像这样简单地构造

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

BufferedReader不能直接从System.in构造,因此需要InputStreamReader才能将字节转换为字符,这是为了使它易于人类阅读吗?但是PrintWriter不需要从字符包装回字节,为什么会这样,Java 会自动化它吗?因为对于机器来说,一切都是1和0。

所以它需要InputStreamReader将字节转换为字符,这是为了 让它人性化可读?

不,这是为了性能。检查一下以查看它们之间的区别。

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

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

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

现在考虑:

  • System.in是一个InputStream.
  • System.outSystem.err是从OutputStream延伸出来的PrintStream

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

因此,PrintStream视为一个旧的不洁类,做OutputStreamWriter + BufferedWriter所做的事情,但不是Writer

BufferedWriter+OutputStreamWriter具有与PrintStream相同的复杂性(尽管被颠倒了(。人们还看到扫描仪new Scanner(System.in)。这不是一个Reader,并且对标记化有多余的支持。它像PrintStream一样具有简短的优点,但对于其不必要的开销来说,它肯定更不干净。(在StackOverflow on Scanner中提到了很多错误。

相关内容

最新更新