即使子进程已退出,java.io.Process是否保证输出保持不变?

时间:2015-08-21 04:05:51

标签: java process io stream buffer

如果proc已退出,输出字符串存储在哪里?

内部缓冲区?

如果内部缓冲区太小而不能包含巨大的字符串?

我们可以保证不会丢失字符串吗?

package Hello;

import java.io.*;

public class Hello {

    public static void main(String args[]) {

        String line = null;

        try {
            ProcessBuilder pb = new 
                ProcessBuilder("command_to_output_huge_strings");

            Process proc = pb.start();
            proc.waitFor();
            //
            // Now proc may have finished its huge output and exited.
            //   

            // Now we want to get the huge strings proc outputed.
            BufferedReader stdInput = new BufferedReader(
                    new InputStreamReader(proc.getInputStream()));
            while ((line = stdInput.readLine()) != null) {
                System.out.println(line);
            }

        } catch (Exception e) {
        }
    }
}

1 个答案:

答案 0 :(得分:1)

  1. Process.getInputStream().
  2. 中没有缓冲
  3. 过程本身可能会有缓冲。
  4. 在刷新缓冲区之前,进程无法退出。
  5. 您正在呼叫Process.waitFor(),然后尝试读取其输出。
  6. 因此,您的问题没有意义,您的代码又回到了前面。您应该阅读所有流程的输出,然后然后调用waitFor().