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?
如果你有一个4GB只有一行的文本文件,并且你正在“逐行”处理它,那么你在编程中犯了一个严重的错误,因为你不理解你正在使用的数据。
当您需要使用 CSV 或其他此类格式的数据进行简单工作并且行大小易于管理时,它们是方便的方法。
现实生活中4GB单行文本文件的示例是没有换行符的 XML 文件。您可以使用流式 XML 解析器来读取该内容,而不是推出自己的逐行读取的解决方案。
| 归档时间: |
|
| 查看次数: |
2572 次 |
| 最近记录: |