用于创建大型CSV文件的Java IO的最佳实践

dps*_*dce 8 java csv io

嗨,我需要创建几个大的CSV文件,entires的顺序可能是200万.我所以我想知道如何有效地做到这一点..因此我的脑子里几乎没有问题

1.当我们通过BufferedWriter写文件时,我们应该多久刷新一次?但是我认为bufferedWriter维护自己的缓冲区并且一旦缓冲区已满就会自动刷新它,如果是这样的话那么为什么那里的flush方法呢?

  1. 因为我要创建的文件会很大.所以当我开始写文件时,文件会自动提交到磁盘吗?(在调用writer.close()之前)或整个文件保留在主存储器中直到我关闭写入器?

    • 通过提交我的意思是已经写入的部分的任何部分都没有在主存储器中,即它已准备好用于GC

Jac*_*nds 5

  1. BufferedWriter实现应该在适当的时候很好地进行刷新。就您而言,您永远不需要致电flush.

    至于为什么有一个flush方法,这是因为有时你会希望立即写入输出而不是等待 的BufferedWriter缓冲区变满。 BufferedWriter不仅仅用于文件;它还可用于写入控制台或套接字。例如,您可能想通过网络发送一些数据,但数据不足以导致BufferedWriter自动刷新。为了立即发送此数据,您将使用flush.

  2. 您写入的所有数据BufferedWriter不会同时保留在内存中。BufferedWriter当的缓冲区填满时,它会被分段写出(刷新) 。一旦您close最后调用,BufferedWriter将对缓冲区中尚未写入磁盘的所有剩余内容进行最后一次刷新并关闭文件。