1

何らかの理由で、このコードは出力ストリームを閉じたときにのみ機能します。閉じずに動作させるにはどうすればよいですか?

プロセスを再起動せずにプロセスにデータを送信し続けることができるように、開いたままにしたいのです。

ProcessBuilder pbuilder = new ProcessBuilder(procCmds);
            pbuilder.directory(new File(workingDir));
            Process p = pbuilder.start();

    BufferedWriter outputStream = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
    String str = "hello world heard from java\n";
    outputStream.write(str, 0, str.length());
    outputStream.flush();
    System.out.println("wrote " + str);
    BufferedReader errorStream = new BufferedReader(new InputStreamReader(p.getErrorStream()));
    BufferedReader inputStream = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String line = null;
    while((line=errorStream.readLine())!=null)
        System.out.println(line);
    while((line=inputStream.readLine())!=null)
        System.out.println(line);

    //p.waitFor();
    outputStream.close();
    errorStream.close();
    inputStream.close();
4

1 に答える 1

1

エラーと入力ストリームをマージするか、別のスレッドでそれらのいずれかを読み取る必要があります。現在、エラー ストリームを EOS に読み取ろうとしていますが、これはプロセスが終了したときにのみ発生するため、入力ストリームをまったく読み取れません。プロセスが終了するまで入力ストリームで EOS を取得することはできないため、提供する出力がさらにある場合は、EOS に読み取ることも意味がありません。おそらく、両方のストリームを別々のスレッドで読み取る必要があります。

于 2012-10-22T06:51:11.420 に答える