java - 在java中执行外部命令

标签 java imagemagick

有没有一种方法可以在 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/

相关文章:

java - java中访问包下的文件

javax.imageio.IIOException : Can't create an ImageInputStream in Tomcat 9, OpenJDK 11 和 Geoserver

java - 为什么 "System.out.println"在 Android 中不起作用?

php - 使用 Imagemagick 应用绝对对比度和亮度

perl - 尝试在 macOS、ventura、13.2(Intel 机器)上安装 perl Image::Magick 模块时出错

java - -accountId 无法解析或不是字段

java - 非空字符串中的空字符串

windows - Windows 和 Linux 上的 ImageMagick 'convert -sepia-tone' 不同

bash - 使用 Amazon MapReduce/Hadoop 进行图像处理

python - 根据亮度/亮度对图像文件进行排序