【问题标题】:java - very fast writing to a file [duplicate]java - 非常快速地写入文件[重复]
【发布时间】:2011-08-31 06:35:16
【问题描述】:


我得到一个快速的数据流(对象),我想把它写到一个文件中。
这是一个独立的进程,所以除了从套接字读取数据并将其解析为 csv 并将所有数据写入文件之外,它什么也不做。

将大量 csv 行写入文件的最佳方法是什么?
缓冲区正在写我的解决方案吗?
Java 中有缓冲的 File 对象吗?
我应该自己管理并使用 writeLines() 吗?

【问题讨论】:

  • 什么,现在?它需要非常快,但效率不高?
  • 表示我不对数据做任何计算。所以我只需要它足够快就可以写完所有内容。我会解决我的问题。

标签: java file


【解决方案1】:
【解决方案2】:

如果您要处理大量数据吞吐量,那么我建议您使用一组内存缓冲区来存放到达的数据,然后有一个线程/线程池使用 Java NIO 来“使用”这些缓冲区和将它们写入磁盘。但是,您将受到磁盘写入速度的限制——请记住,网络速度快于硬盘速度并不罕见!因此您可能需要考虑一个线程池,它写入不同的物理位置,并且仅在接收和写入所有数据后“粘贴”这些文件。

【讨论】:

    【解决方案3】:

    如上所述,限制您的可能是它的磁盘 I/O,而不是 Java 抽象。

    但除了使用好的库来处理 CSV 之外,您还可以考虑使用其他(甚至更)高效的格式,例如 JSON;以及压缩。 GZIP擅长压缩东西,但比较慢;但也有更快的。例如,LZF(如this Java implementation)的速度足以以高于典型磁盘 I/O 的速度进行压缩(并且解压缩速度更快)。因此,压缩输出很可能会增加吞吐量并减少磁盘使用量。

    【讨论】:

    • +1 指向 LZF :)
    猜你喜欢
    • 2021-03-23
    • 1970-01-01
    • 2012-07-15
    • 2013-04-17
    • 2013-04-09
    • 2020-06-30
    • 1970-01-01
    • 2011-06-25
    • 2015-01-27
    相关资源
    最近更新 更多