我必须在我的 java 程序中使用 pkzip 进行压缩(因为标准 java zip 例程在大型机上不起作用),我认为它可以正确压缩,但是需要很长时间才能完成。这是我的代码
Runtime myruntime = Runtime.getRuntime();
Process newproc = myruntime.exec("c:\\app\\pkzipc.exe -add c:\\output\\test.zip c:\\doc\\foo.pdf c:\\doc\\bar.doc"");
foo.pdf
和 bar.doc
每个大约 20MB,如果我通过命令行执行它,那么压缩大约需要一秒钟,但是当我使用java,完成压缩需要 30 分钟到 1 小时。知道为什么吗?
最佳答案
您需要确保您正在读取子进程的标准输出和错误流。如果 pkzip 生成输出,那么它将被操作系统缓冲,如果缓冲区已满,那么您可以预期子进程将阻塞,直到缓冲区被清除。
Process
对象具有获取输入、输出和错误流的方法。创建从输出流和错误流中读取的新线程,并将它们通过管道传输到 System.out
和 System.err
,或者如果您不关心则丢弃输出
关于调用 pkzip 的 Java 进程需要很长时间才能压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9882917/