【发布时间】:2009-09-01 05:43:12
【问题描述】:
什么是更好的选择(就性能而言):使用 fileinputstream 和 fileoutputstream 复制文件或从 Java 运行特定于操作系统的命令复制命令?
【问题讨论】:
标签: java performance file copy
什么是更好的选择(就性能而言):使用 fileinputstream 和 fileoutputstream 复制文件或从 Java 运行特定于操作系统的命令复制命令?
【问题讨论】:
标签: java performance file copy
我很确定使用操作系统特定的复制命令会更快,或者至少与简单的自写解决方案一样快。操作系统特定的命令可能会使用合理的缓冲区大小和其他优化,否则您必须自己弄清楚。
编辑:
x-x 是对的,你不应该直接调用复制命令。我以为 Java 已经有一个复制方法,比如 File.copy() 什么的,但我找不到任何东西,甚至在 JDIC 中也找不到。所以 Apache Commons IO 可能是要走的路。
【讨论】:
用 Java 实现。
运行操作系统命令的一个问题是您必须在操作系统内核级别创建一个完整的进程,这是一项重量级操作。有很大的固定开销,这对于较小的文件尤其严重。
另一个问题是它没有充分的理由添加了系统依赖。
【讨论】:
使用优秀的 commons-io 库,它有一个 method 可以做到这一点。它使用非常广泛,而且非常优化。
从here 下载它,或者如果使用maven,则将POM dependency 复制到您的 pom.xml 文件中。
不要使用特定于操作系统的副本进行复制,它不会是可移植的。使用来自 java 的非 java 代码,无论是使用 JNI 还是生成外部命令,都是令人头疼和维护的噩梦。
【讨论】:
取决于发生错误时您将采取的措施。通常,本机命令能够更好地处理错误情况,但您可能很难让它与用户交互。
纯 Java 解决方案(除了跨平台)让您可以完全控制 - 我建议使用库来处理混乱的细节和错误情况。
【讨论】: