【发布时间】:2017-10-11 05:28:46
【问题描述】:
Java 8 的流 API 已经很方便并广受欢迎。对于文件 I/O,我发现提供了两个 API 来生成流输出:Files.lines(path) 和 bufferedReader.lines();
不过,我没有找到提供固定大小缓冲区的 Stream 用于读取文件的流 API。
我担心的是:如果文件的行很长,例如4GB 文件只有一行,这些基于行的 API 是不是非常低效?
基于行的阅读器至少需要4GB 内存来保持该行。
与固定大小的缓冲区读取器 (fileInputStream.read(byte[] b, int off, int len)) 相比,它最多占用内存的缓冲区大小。
如果上述问题属实,是否有更高效的文件 i/o API 的 Stream API?
【问题讨论】:
-
Files.lines(path)和bufferedReader.lines()用于读取字符/字符串,而InputStream::read方法用于读取字节。我不知道你的问题出在哪里。 -
如果输入是基于行的,并且流链可以单独处理每一行,那么如何在固定大小的块中处理相同的数据?