4

如果我有以下示例文件,其中每个数字代表一个字节(123 有字节 1、2 和 3):

123456789

假设我创建了一个 FileInputStream。这会逐字节读取二进制。所以 .read() 返回 1,然后是 2,等等。现在假设我创建了一个缓冲区。它读取的初始块(如果我正确理解缓冲区)是 1-5。这使它不仅可以逐字节读取,而且可以读取整行字符等。但是如果我再次点击 .read() ,我从 6 开始,而不是 BufferedReader 停止的位置(所以如果 3 是换行符,我告诉 BufferedReader 打印第一行,它打印 1-2,然后使用 FileInputStream 中的 .read() 给我 6,而不是 3。)

为了能够通过分隔符解析数据,扫描器是否隐式创建缓冲区,就像 BufferedReader 如何创建缓冲区以便它可以找到换行符等?如果我将一个单独的 FileInputStream 传递给扫描仪,使用 .read() 将不会打印扫描仪找到的第一个分隔符之后的第一个字节,而是在扫描仪占用的“块”末尾打印?

4

2 回答 2

4

的。

java.util.Scanner代码:

// Internal buffer used to hold input
private CharBuffer buf;

// Size of internal character buffer
private static final int BUFFER_SIZE = 1024; // change to 1024;
于 2009-08-27T14:08:32.213 回答
1

这不是很明显,但是如果您仔细查看 Scanner 的 API 文档,您会发现它是基于Readable接口的——并且该接口中唯一的方法是基于缓冲区的。所以是的,Scanner 隐式创建了一个缓冲区。

于 2009-08-27T14:15:33.623 回答