java - 非常快速地写入文件

时间:2011-05-23 15:48:39

标签: java file


我得到一个快速的数据流(对象),我想把它写到一个文件 这是一个独立的过程,因此除了从套接字读取数据解析为csv并将所有内容写入文件之外,它不会执行任何操作。

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

3 个答案:

答案 0 :(得分:9)

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

除了使用好的lib来处理CSV之外,你可以考虑使用其他(甚至更多)高效的格式,如JSON;以及压缩。 GZIP擅长压缩事物,但速度相对较慢;但也有更快的。例如,LZF(如this Java implementation)足够快,可以以高于典型磁盘I / O的速度进行压缩(并且压缩速度更快)。因此,压缩输出可能会提高吞吐量并减少磁盘使用量。