ホームページ >Java >&#&チュートリアル >Java プロセスで入力/出力ストリームを確実に処理するにはどうすればよいですか?
この記事では、Java プロセスを操作する際の入出力ストリームの利用の複雑さについて説明します。これらのストリームの機能を維持する際に発生する課題の解決に特に焦点を当てます。
提供されたコード例は、コマンドを bash シェルに入力し、その結果の出力が次のようになるシナリオを例示しています。反響した。ただし、最初の読み取り後に問題が発生し、後続の出力ストリームが操作不能になります。この記事は、これらの問題を解明し、解決策を提案することを目的としています。
最初のステップでは、外部プロセスの実行を簡素化する ProcessBuilder クラスを利用するようにコード スニペットを変更します。その主な利点は、子プロセスの標準エラー ストリームをその標準出力にリダイレクトできることです。
ProcessBuilder builder = new ProcessBuilder("/bin/bash"); builder.redirectErrorStream(true); Process process = builder.start();
さらに、プロセスの標準出力の読み取りを担当するループは、終了時にのみ終了するため、ハングする傾向があります。リーダーからの -of-file。これを解決するには、シェル コマンドの出力の結論を区切るために「マジック」ラインを使用する手法が使用されます。
while (scan.hasNext()) { String input = scan.nextLine(); writer.write("((" + input + ") && echo --EOF--) || echo --EOF--\n"); writer.flush(); line = reader.readLine(); while (line != null && ! line.trim().equals("--EOF--")) { System.out.println ("Stdout: " + line); line = reader.readLine(); } if (line == null) { break; } }
このアプローチの制限を認識することが不可欠です。 :
この記事で概説した変更は、Java プロセスを操作するときに入出力ストリームの機能を維持する際に遭遇する課題に対する包括的な解決策を提供します。この手法には一定の制限があるかもしれませんが、シェル コマンドを実行し、スケジュールされたタスクを通じてその出力を定期的に取得する信頼性の高い手段を提供します。
以上がJava プロセスで入力/出力ストリームを確実に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。