У меня есть инструмент Java с помощью следующего кода:выхода процесса является слишком большим
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(cmd);
// any error message?
StreamGobblerLocal errorGobbler = new StreamGobblerLocal(proc.getErrorStream(), "ERROR");
// any output?
StreamGobblerLocal outputGobbler = new StreamGobblerLocal(proc.getInputStream(), "OUTPUT");
// kick them off
errorGobbler.start();
outputGobbler.start();
// any error???
int exitVal = proc.waitFor();
commandResultBean.setCLI_ReturnValue(exitVal);
Это работает, но когда выход подпроцесса является большим, ТУПИКИ. Я почти уверен, что проблема здесь в следующем:
Поскольку некоторые местные платформы только обеспечивают ограниченный размер буфера для стандартных входных и выходных потоков, неспособность быстро записать входной поток или читать выходной поток подпроцесс может вызвать подпроцесс блокировки или даже тупик.
Я нашел его здесь: http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html
Как я могу решить эту проблему? Большой вывод похож на 30000 строк в «Блокноте», и мне приходится регистрировать эти строки.
Мой код был скопирован из этой статьи, поэтому вы можете проверить реализации, которые я не копировал здесь.
http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html
Пожалуйста, обратите внимание, что я не первый разработчик инструмента, так что я с трудом могу ответить на такие вопросы, как «Почему вы используете это» или подобные вопросы.
Любая помощь приветствуется, спасибо заранее.
Я столкнулся с подобной проблемой, но ответ, который вы предлагаете выше, вызывает у меня проблемы с Linux, потому что мне нужно использовать много потоков и блокировать их, в любом случае спасибо за обмен –