有没有一种方法可以在 java 中执行命令,而不会受到使用 ProcessBuilder 的启动开销(缓慢)的影响?
更多细节:我正在使用 im4java,它是一个在内部使用 ProcessBuilder 来执行 imagemagick 程序的 java 库。它很慢。我创建了一个小型单元测试,表明 ProcessBuilder(不是 im4java)是问题所在。缓慢是使用 ProcessBuilder 的启动开销。我发现互联网上的帖子说 processbuider 有开销,所以不仅仅是我说有。
List<String> commands = new ArrayList<String>();
commands.add("C:\\PROGRA~2\\ImageMagick-6.6.4-Q16\\convert.exe");
commands.add("dog.jpg");
commands.add("output.jpg");
ProcessBuilder processBuilder = new ProcessBuilder(commands);
Process start = processBuilder.start();
start.waitFor();
最佳答案
不推荐这样做,但您可以编写一个 JNI 库来完成与 ProcessBuilder 相同的操作。也许你的会更快,但我不会指望它,而且你会失去跨平台兼容性。
我们在这里说话有多慢?我自己使用 ProcessBuilder
来运行 Git 命令(还没有机会研究 JGit),它看起来足够活泼。您在 Linux 上可能运气更好,因为开销实际上可能是在 Windows 重量级进程创建中。
关于java - 在java中执行外部命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3943431/