【问题标题】:Does Scanner have its own buffer for reading?Scanner 是否有自己的读取缓冲区?
【发布时间】:2019-05-18 12:29:08
【问题描述】:

BufferedReaderBufferedInputStream 有自己的缓冲区用于读取。有缓冲区是他们一次可以读取一行的原因吗?

Scanner 也可以一次读取一行。但它不一定适用于BufferedReaderBufferedInputStream。它是否有自己的缓冲区来一次读取一行?

谢谢。

【问题讨论】:

  • 为什么你认为一个类需要一个缓冲区来读取一行?缓冲区用于最小化硬件访问量,而不是读取一行。
  • 如果不使用缓冲区,如何将字符收集到字符串中?

标签: java io buffer


【解决方案1】:

来自Oracle's docs,特别是来自这一行:

扫描器可以从任何实现了 Readable 接口的对象中读取文本。如果调用底层可读的 Readable.read(java.nio.CharBuffer) 方法抛出 IOException 则扫描器假定已到达输入的末尾。底层可读最近抛出的 IOException 可以通过 ioException() 方法检索。

Scanner 似乎没有自己的缓冲区。它使用来自底层对象(实现Readable)的缓冲区,并使用正则表达式进行解析。

【讨论】:

  • 谢谢。 “它使用来自底层对象的缓冲区(即实现Readable)”,如果底层对象不是BufferedReader的对象,那么Scannere不会使用任何用户空间缓冲区?
  • 正确。它直接标记和解析字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-13
相关资源
最近更新 更多