javaから Runtime.exec() で外部プロセスを呼び出して、そのプロセスの標準出力を InputStream から読み込んでいるときに、外部プロセスが終了すると InputStream.read() は IOException を throw するものだと思っていたら、延々と -1 を読み出している。
お陰で呼び出したプロセスが、正常に終了しないと無限ループに陥ることが判明。まあ if ((n = is.read()) < 0) で、判定すればいいことなのだけど、エラー処理を全てException でやるという考えでコーディングしていると、なんかこういうのって面倒なんですよねぇ。
まあ、C のパイプ出力の read 関数を、JNI で読んでいるだけだから、そういう実装になるんでしょうけど。仕様としては、IOException を throw するのが正しいよねぇ。
0 件のコメント:
コメントを投稿