【问题标题】:How can I Optimize the copy time in java?如何优化java中的复制时间?
【发布时间】:2016-01-03 15:09:27
【问题描述】:

是否有可能使执行时间更快?

import java.io.*;

public class CopyFile {

  public static void main(String[] args) throws Exception {
    final long start = System.nanoTime();

    InputStream in = new FileInputStream("test.pdf");
    OutputStream out = new FileOutputStream("test_copy.pdf");

    int c;
    while ( (c = in.read()) != -1 )
        out.write(c);

    in.close();
    out.close();

    System.out.println("Took " + (System.nanoTime() - start) / 1000_000 + "ms to finish");

  }    
}

【问题讨论】:

  • 是的。谷歌一下,你会找到的。顺便说一句,这段代码可以使用Files.copy 缩减为一行
  • 当今人们无法从世界上最大的搜索引擎中找到任何东西,这是怎么回事。毕竟,谷歌搜索比编程容易得多。

标签: java performance io


【解决方案1】:

使用固定大小的缓冲区可能会产生更好的性能,因为您一次将读取超过 1 个字节的数据。这是通过调用read(b) 并给出一个初始化的字节数组来完成的。

但是,我强烈建议您不要重新发明轮子。您可以使用自 Java 7 以来提供的工具和 Java NIO.2 API (Files.copy(source, target, options...)):

Files.copy(Paths.get("test.pdf"), Paths.get("test_copy.pdf"));

如果您想对副本进行更多控制,可以将此调用作为第三个变量参数提供options,例如StandardCopyOption.REPLACE_EXISTING,如果目标文件已经存在,它将替换它。

Files.copy(Paths.get("test.pdf"), Paths.get("test_copy.pdf"), StandardCopyOption.COPY_ATTRIBUTES);

【讨论】:

    【解决方案2】:

    使用BufferedInputStreamBufferedOutputStream 会提高效率,但最好不要重新发明轮子:

    Files.copy(Paths.get("test.pdf"), Paths.get("test_copy.pdf"))
    

    【讨论】:

      【解决方案3】:

      你可以的

      public static void main(String[] args) throws Exception {
          final long start = System.currentTimeMillis();
          Files.copy(Paths.get("test.pdf"), Paths.get("test_copy.pdf"));
      
          long time = System.currentTimeMillis() - start;
          System.out.println("Took " + time + "ms to finish");
      
        }  
      

      【讨论】:

        【解决方案4】:

        使用 java Run-time 并调用操作系统特定的命令来完成这项工作。它将确保复制将在操作系统级别发生。

        【讨论】:

          猜你喜欢
          • 2015-07-05
          • 2021-04-10
          • 2014-03-17
          • 2014-09-09
          • 1970-01-01
          • 2020-09-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多