Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 扫描仪';启用换行时,s缓冲区不代表整个文件_Java_File_Java.util.scanner - Fatal编程技术网

Java 扫描仪';启用换行时,s缓冲区不代表整个文件

Java 扫描仪';启用换行时,s缓冲区不代表整个文件,java,file,java.util.scanner,Java,File,Java.util.scanner,基本上,我正在做的是写入一个文件,然后稍后再读取它。有几次我看着缓冲区,看到线路“被切断”,我开始担心这是一个冲洗问题。然而,我无意中发现,其中指出: 所以,扫描器似乎不会一次读取整个文件…它通过缓冲区读取文件-这意味着分块读取 我在扫描仪上看到了这一点。看看缓冲区大小,我看到1024是大小 然而!我将每个条目作为单独的一行写入,在写入之前传入消息并在其上附加\n。把这个\n拿走,就会产生一些有趣的结果。在没有换行符的情况下运行时,我发现缓冲区大小神奇地增加到了5232之类的有趣内容,现在我可以

基本上,我正在做的是写入一个文件,然后稍后再读取它。有几次我看着缓冲区,看到线路“被切断”,我开始担心这是一个冲洗问题。然而,我无意中发现,其中指出:

所以,扫描器似乎不会一次读取整个文件…它通过缓冲区读取文件-这意味着分块读取

我在扫描仪上看到了这一点。看看缓冲区大小,我看到1024是大小

然而!我将每个条目作为单独的一行写入,在写入之前传入消息并在其上附加
\n
。把这个
\n
拿走,就会产生一些有趣的结果。在没有换行符的情况下运行时,我发现缓冲区大小神奇地增加到了5232之类的有趣内容,现在我可以在缓冲区中看到文件的全部内容了

我制作扫描仪的方法只是一个
新扫描仪(newfileinputstream(“path.txt”))
,然后使用Intellij的变量检查对其进行检查(这就是我想切断的地方,我无法看到文件中的所有内容)


本质上,我的问题是:为什么添加换行符会强制缓冲区保持固定大小并遵守规则,而不添加换行符(意味着整个文件只有一行)会让缓冲区保持需要的大小?

我建议,如果您只想读取文件,使用
BufferedReader
而不是
扫描仪
。有关更多信息,请参见此

回答你的问题: 没错,默认的扫描缓冲区大小是1024()

较大的扫描仪缓冲区的问题是由于 扫描仪总是将最长的行读取到其缓冲区中,甚至 如果长度超过默认的1024字节。删除所有
\n
在你的文件里让扫描器觉得只有一条很长的线, 它必须缓冲

如您所见,缓冲区大小对效率几乎没有影响 当您读取文件时


希望我能帮助您

您能提供一些代码,说明如何创建
扫描仪
?您使用的是任何正则表达式还是使用的是
nextLine()
etc?@ringbearer我从
FileInputStream
创建了扫描仪,然后使用Intellij的检查功能对其进行检查