【问题标题】:optimizing a file making program [closed]优化文件制作程序[关闭]
【发布时间】:2013-03-22 12:55:26
【问题描述】:

我目前有一个工作程序,可以通过填充零来创建任何所需大小的文件。这很好,但我需要这样做的文件大小是千兆字节,而且这种方法需要很长时间才能做到这一点。如果有人可以阅读此代码并提供提示以使其更快,将不胜感激。

public class fileMaker
{
 public static void main(String[] args) throws IOException
 {
     fileMaker fp = new fileMaker();


     Writer output = null;
     File f = new File(args [1]);
     output = new BufferedWriter(new FileWriter(f, true));
     output.write("0");


     long size = fp.getFileSize(args[1]);

     long mem = Long.parseLong(args[0]) * 1073741824; //1 Gigabyte = 1073741824 bytes        


     while(size < mem)
     {
            output.write("0");


            output.flush();

            size = fp.getFileSize(args[1]);
            //System.out.println(size + " bytes completed out of " + mem);

            double avg = (double)size / mem * 100;

            System.out.println(avg + "% complete");

     }
     output.close();
     System.out.println("Finished at - " + size / 1073741824  + " Gigabytes");

 }


private long getFileSize(String fileName) 
{
    File file = new File(fileName);        
    if (!file.exists() || !file.isFile()) 
    {
        System.out.println("File does not exist");
        return -1;
    }
    return file.length();
}

}

【问题讨论】:

标签: java optimization writer


【解决方案1】:
  1. 一次写入多个字节。一次写入一些 4096 字节的倍数。
  2. 不要在每次写入后刷新流。
  3. 无需查询文件大小,只需在每次写入时递增size

【讨论】:

  • 谢谢,但是如何增加尺寸?
  • 嗯,size += how many bytes you wrote;?
  • 没错,我就是这么想的,但是如果我要像这样output.write("0000000....") 写入文件,我将如何在how many bytes you wrote 中定义它?
  • 你在字符串中放了多少个零?那就是你写的字节数。
  • 好吧,如果我输入 4096 个零,那就是 size += 4096 ?
猜你喜欢
  • 2011-01-24
  • 2012-03-04
  • 2011-01-29
  • 1970-01-01
  • 2012-04-01
  • 1970-01-01
  • 2012-12-05
  • 2011-08-03
  • 2020-12-02
相关资源
最近更新 更多