在java中执行外部命令
有没有办法在java中执行一个没有使用ProcessBuilder的启动开销(缓慢)的命令?
更多细节:我使用的是im4java,它是一个java库,在内部使用ProcessBuilder来执行imagemagick的程序。 这很慢。 我创建了一个小unit testing,显示ProcessBuilder(不是im4java)是问题所在。 缓慢是使用ProcessBuilder的启动开销。 我在互联网上发现了一些post,说流程编译器有开销,所以不仅仅是我这样说。
List commands = new ArrayList(); 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重量级进程创建中。
Runtime.getRuntime().exec(...)
可用于运行外部命令。 您可以将List转换为命令数组或字符串以传递给exec()。
- 运行selenium remotedriver时出现带有NativeConstructorAccessorImpl.newInstance0的SessionNotCreatedException错误
- 并发添加非线程安全的HashSet – 可能发生的最坏情况是什么?