gpt4 book ai didi

java - 使用Java运行 "tar"命令,但生成tar文件需要花费大量时间

转载 作者:行者123 更新时间:2023-12-02 06:25:49 24 4
gpt4 key购买 nike

在我的项目中,我需要为用户生成一个代理,该代理包括一些jar(约22M),一些源类(约200k)和一个XML。服务器将为不同的用户生成不同的xml,所以我必须动态生成代理。我使用 Runtime.getRuntime().exec("tar...") 来 tar 文件以生成代理。

当我运行单元测试时,生成花费了很多时间,每个代理大约需要 2 分钟。我不能让用户等待一个页面2分钟......那么是否存在任何其他方法可以使这个程序更加高效,或者有另一种方法可以快速流畅地生成代理?感谢!

 /**
* tar the agents
* @param inputFiles agent files
* @param outputFile agent tar
* @param baseDir the directory path to run "tar" command
*/
public static void tarFile(String[] inputFiles,String outputFile,String baseDir){
String cmd="tar -zcf "+outputFile+" ";
for (int i = 0; i < inputFiles.length; i++) {
cmd+=inputFiles[i]+" ";
}
System.out.println(cmd);
try {
Process process=Runtime.getRuntime().exec(cmd, null, new File(baseDir));
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(process.getInputStream()));
String s;
while ((s=bufferedReader.readLine())!=null) {
System.out.println(s);
}
process.waitFor();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

这是我的tar类,param--basedir是设置命令的执行路径

最佳答案

我需要查看您传递给 Runtime.getRuntime().exec 的实际 tar 命令。

有 4 个因素真正影响将文件压缩成 tarball 的速度:

  1. 机器上的 CPU 速度
  2. 盒子上的 I/O 速度
  3. 要归档的源数据量
  4. 压缩

rzymek 指出您可以使用 Apache Commons Compress 本地生成该文件。但是,我不确定这会更快,除非我们了解命令行方法的约束是什么。

如果你自己使用 shell 来 tar ,速度可以比较吗?如果是这样,请尝试降低压缩比,甚至完全关闭它(删除 tar czf 中的“z”选项)。

如果您正在压缩 tar 文件并且需要压缩它,那么如果 XML 很小,您可以预先压缩 JAR 文件(如果我记得的话,我认为它们已经被压缩了,但是您可能需要检查压缩率),然后使 tarball 解压缩,因为压缩压缩文件不会完成任何任务(有时会更慢!)

关于java - 使用Java运行 "tar"命令,但生成tar文件需要花费大量时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20545054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com