Java扫描程序是否会隐式创建缓冲区,即使您没有传递缓冲区?

Java扫描程序是否会隐式创建缓冲区,即使您没有传递缓冲区?,java,buffer,java.util.scanner,Java,Buffer,Java.util.scanner,如果我有以下示例文件,其中每个数字表示一个字节(123有字节1、2和3): 假设我创建了一个FileInputStream。这将逐字节读取二进制文件。read()返回1,然后返回2,以此类推。现在假设我创建了一个缓冲区。它读入的初始块(如果我正确理解缓冲区)是1-5。这使得它不仅可以逐字节读取,还可以读取整行字符,等等。但是如果我再次点击.read(),我从6开始,而不是从BufferedReader停止的位置开始(因此,如果3是换行符,我告诉BufferedReader打印第一行,它打印1-2

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

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

为了能够通过定界符解析数据,扫描程序是否隐式创建了一个缓冲区,就像BufferedReader创建一个缓冲区以便能够找到换行符一样?如果我将一个单独的FileInputStream传递到扫描仪中,则使用.read()将不会打印扫描仪找到的第一个分隔符后面的第一个字节,而是打印在扫描仪获取的“块”的末尾?

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;

这并不明显,但如果您仔细查看Scanner的API文档,您会发现它是基于接口的,并且该接口中唯一的方法是基于缓冲区的。是的,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;