У меня возникли проблемы с получением результата подпроцесса. Обычно я бы использовал process.getInputStream()
. Однако в этом случае я устанавливаю подпроцесс наследовать от родительского ввода-вывода. Мне нужно сделать это, потому что выход из подпроцесса превышает буфер, установленный ядром, и, таким образом, будет зависать. Я использую Linux btw.Получение вывода подпроцесса, унаследованного родительского IO
//creating a named pipe
File fifo = fifoCreator.createFifoPipe("fifo");
String[] command = new String[] {"cat", fifo.getAbsolutePath()};
process = new ProcessBuilder(command).inheritIO().start(); //Inherit IO
FileWriter fw = new FileWriter(fifo.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(boxString);
bw.close();
process.waitFor();
fifoCreator.removeFifoPipe(fifo.toString());
//Gets nothing here
stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
String input = readAllLines(stdInput);
В идеале я хочу сохранить все в памяти, так как хочу хорошей производительности и меньше мусора.
Есть ли способ перенаправить вывод подпроцесса в некоторую структуру данных? Если нет, есть ли способ получить результат?
Я думаю о создании отдельного потока, который получает выходной поток.