写入文件顺序vs批量

时间:2012-08-09 21:15:55

标签: java file-io

我有一个程序可以在平面文件中写入大约800万行数据。截至目前,该程序正在为每条记录调用bufferedwriter.write,我计划使用以下策略批量编写

  1. 保持数据结构(我使用数组)来保存特定数量的记录。
  2. 使用数组在文件中写入详细信息。这里是代码片段(数组是存储记录的数组的名称,阈值计数是写入过程的开始)

    if (array.length==thresholdCount) {
        writeBulk(array);
    }
    
    public void writeBulk(String[] inpArray) {
         for (String line:inpArray) {
              if (line!=null) {
                   try {
                        writer.write(line +"\n"); 
                   } catch (IOException e) {
                        e.printStackTrace();
                   }
              }
         }
    
     }
    
  3. 但是我没有看到太多的性能提升。我想知道是否有办法确定最佳阈值计数? 我还计划进一步调整代码,以便将数组中的每个元素存储为一些n个记录的串联,然后调用批量方法。例如,长度为5000的数组实际上将包含50000条记录,其中数组中的每个索引包含10条记录。但在此之前,我需要专家意见。

1 个答案:

答案 0 :(得分:1)

对文件的写入在被推送到磁盘之前已经以类似的方式缓冲(除非你刷新 - 实际上并不总是这样做)。因此,预缓冲写入不会加速整个过程。注意:某些IO类通过在每次写入后插入刷新请求来尝试立即写入。对于那些特殊情况,预缓冲有时可以提供帮助,但通常您只需首先使用Class的缓冲版本,而不是手动缓冲自己。

如果你写的是文件末尾之外的其他地方,那么你可以看到一个改进,因为写入文件的中间不需要复制硬盘上已经刷新的条目的内容