是否可以加快执行时间?
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");
}
}
答案 0 :(得分:2)
使用固定大小的缓冲区可能会产生更好的性能,因为您一次只能读取超过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);
答案 1 :(得分:1)
使用BufferedInputStream
和BufferedOutputStream
可以提高效率,但最好不要重新发明轮子:
Files.copy(Paths.get("test.pdf"), Paths.get("test_copy.pdf"))
答案 2 :(得分:0)
你可以做到
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");
}
答案 3 :(得分:0)
使用java运行时并调用特定于操作系统的命令来完成工作。它将确保在操作系统级别上进行复制。