Java 8 的 Files.lines() : Performance concern for very long line

标签 java io stream

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

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

我关心的是:如果文件的行很长,例如一个 4G​​B 文件只有一行,这些基于行的 API 效率不是很低吗?

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

如果上述问题属实,是否有更高效的文件 I/O API Stream API?

最佳答案

如果您有一个只有一行的 4G​​B 文本文件,并且您正在“逐行”处理它,那么您在编程中犯了一个严重错误,因为您不理解数据正在与您合作。

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

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

关于Java 8 的 Files.lines() : Performance concern for very long line,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46680492/

相关文章:

python - 如何一次从文件中读取大量行

java - 如何在java程序中反序列化由protobuf-net序列化的数据

java - log4j ContentAppender 静态时为 null

c++ - 从文件中读取 uint32_t 值

c# - 尝试保存图像 .NET Core 时出现编译错误 - 参数类型 'System.IO.FileStream' 不可分配给参数类型 'System.IO.Stream'

iPhone 实时数据流

java - 如何在 Java(Android) 上迭代我的 RadioButton 以查找字符串

java - FixedCredentialsProvider 在调用 Google Cloud 服务时给出未经授权的异常

nhibernate - 使用 NHibernate 流式传输大型结果集真的有效吗?

python - 您可以流式传输已到达 "hot"的帖子吗?