выполнить внешнюю команду в Java - PullRequest
2 голосов
/ 15 октября 2010

Есть ли способ выполнить команду в java, которая не страдает от издержек запуска (медлительности) использования ProcessBuilder?

Более подробно: я использую im4java, которая является библиотекой Java, которая внутренне использует ProcessBuilder для выполнения программ imagemagick. Это медленно. Я создал небольшой модульный тест, который показывает, что проблема в 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();

Ответы [ 2 ]

0 голосов
/ 15 октября 2010

Это не рекомендуется, но вы могли бы написать библиотеку JNI для того же, что и ProcessBuilder.Возможно, ваш будет быстрее, но я бы на это не рассчитывал, плюс вы потеряете кроссплатформенную совместимость.Я сам использую ProcessBuilder для запуска команд Git (у меня еще не было возможности заглянуть в JGit), и это выглядит достаточно быстро.Возможно, вам больше повезет в Linux, поскольку накладные расходы могут быть связаны с созданием тяжеловесных процессов в Windows.

0 голосов
/ 15 октября 2010
Runtime.getRuntime().exec(...)  

может использоваться для запуска внешней команды.Вы можете превратить свой список в массив команд или строку для передачи в exec ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...