Java 8 的 Files.lines():很长的行的性能问题

mod*_*ler 0 java io stream

Java 8 的流 API 非常方便并受到欢迎。对于文件 I/O,我发现提供了两个 API 来生成流输出:Files.lines(path)、 和bufferedReader.lines();

不过,我没有找到提供用于读取文件的固定大小缓冲区流的流 API。

我担心的是:如果文件的行很长,例如4GB只有一行的文件,这些基于行的 API 是否效率很低?

基于行的读取器至少需要4GB内存来保留该行。与固定大小的缓冲区读取器 ( fileInputStream.read(byte[] b, int off, int len)) 相比,固定大小的缓冲区读取器最多占用内存的缓冲区大小。

如果上述担忧成立,是否有任何更高效的文件 i/o API Stream API?

Kay*_*man 5

如果你有一个4GB只有一行的文本文件,并且你正在“逐行”处理它,那么你在编程中犯了一个严重的错误,因为你不理解你正在使用的数据。

当您需要使用 CSV 或其他此类格式的数据进行简单工作并且行大小易于管理时,它们是方便的方法。

现实生活中4GB单行文本文件的示例是没有换行符的 XML 文件。您可以使用流式 XML 解析器来读取该内容,而不是推出自己的逐行读取的解决方案。