1

ここに私の問題の抜粋コードがあります:

Process process = Runtime.getRuntime().exec(command);
    if (process.waitFor() != 0)
        throw new Exception("error");
    reader = 
        new BufferedReader(new InputStreamReader(process.getInputStream()));

実行中のプロセスは、膨大な出力を生成しています。出力をファイルにリダイレクトすると、プロセスはより速く終了し、出力を画面に出力します(標準出力)。ディスクのパフォーマンスが低い、ファイルシステムのアクセス許可などが原因で、出力をファイルにリダイレクトしたくありません。

process.waitFor() が実行されると、プロセス (呼び出し先) が終了するまで Java がブロックされ、長い時間がかかることがあります。したがって、この問題を回避するために、プロセスの標準出力をリーダーのストリーム入力 (コードの最後の行) にリダイレクトしたいと思います。つまり、呼び出し先は、出力を画面に出力する代わりに、リーダーにリンクされたストリームに出力を生成する必要があります。

私が十分に明確だったことを願っています。どうすればそれができるのだろうか?どんな援助も素晴らしいでしょう。

4

2 に答える 2

1

プロセスの出力を気にしない場合は> /dev/null、Unix または> NULWindows 上の null デバイスにリダイレクトしてください。すべての出力が破棄されるため、ファイルのアクセス許可やパフォーマンスなどについて心配する必要はありません。

出力が気になる場合は、この投稿を見てくださいStreamGobbler.

于 2011-05-31T08:58:16.687 に答える
0

waitFor()を呼び出す前に、出力を読み取る必要があります。現時点では、出力が終了するのを待っています。これは、出力の生成が終了したときにのみ実行できますが、出力を読み取っていないため実行できません。そのため、バッファーがいっぱいになり、ブロックされています。

于 2011-05-31T23:26:30.000 に答える