ホームページ >Java >&#&チュートリアル >Java プロセスからの入力/出力ストリームを確実に管理して、パイプの破損を回避し、一貫した出力を確保するにはどうすればよいですか?

Java プロセスからの入力/出力ストリームを確実に管理して、パイプの破損を回避し、一貫した出力を確保するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-29 12:16:12211ブラウズ

How Can I Reliably Manage Input/Output Streams from a Java Process to Avoid Broken Pipes and Ensure Consistent Output?

Java でのプロセス入出力ストリーム通信

Java では、実行中のプロセスからの入力ストリームまたは出力ストリームへのアクセスは、コマンドの実行と実行に不可欠です。データ交換。ただし、これらのストリームを効果的に管理すると、落とし穴が発生する可能性があります。

問題のハイライト

コード例でパイプ破損エラーが発生し、後続の出力ストリームが機能しない理由を尋ねました。最初に読んだ後。この問題は、シェル プロセスからの入力ストリームと出力ストリームを操作するコードのアプローチにあります。

解決策

この問題に対処するには、次の手順を検討してください。

  1. ProcessBuilder を使用する: を初期化するコードを置き換えます。 ProcessBuilder の「process」変数。これにより、プロセス処理をより適切に制御できます。 "ProcessBuilder.redirectErrorStream(true)" を使用して、標準出力とエラーの両方を 1 つのストリームにリダイレクトします。
  2. ループ習慣を断ち切る: リーダー (stdout) から読み取るループのみが終了します。プロセスが完了したとき。これは、追加の入力が提供されないとハングすることを意味します。
  3. コマンド区切り文字を導入します: 複数のコマンドから出力を確実に取得するには、「マジック ストリング」手法の採用を検討してください。各コマンドの出力の終わりを示す一意の文字列 (例: "--EOF--") を導入します。
  4. 入力書き込みの調整: 区切り文字を含むコマンドを送信するには、コマンドに「&& echo --EOF--」を付けます。 「exit」が入力された場合は、代わりに「exit」を送信します。

説明

これらの変更により、パイプ破損エラーが解決され、複数のコマンドを実行できるようになります。一貫した出力の取得。 「マジック ストリング」区切り文字により、読み取り操作が常に区切り文字で終了するようになり、ハングが防止されます。

これらの調整にもかかわらず、いくつかの制限が残ります。

  • ユーザー入力プロンプト コマンドにより、
  • 出力が改行で終わるという前提により、問題が発生する可能性があります。
  • 「終了」処理は改善されましたが、その他の特殊な入力ケースについては追加の考慮が必要な場合があります。

これらの提案を組み込むことで、コードは効率的に入力ストリームと出力ストリームを管理できます。実行中のプロセス。コマンドを定期的に実行する、安定した信頼性の高いスケジュールされたタスクへの道を開きます。

以上がJava プロセスからの入力/出力ストリームを確実に管理して、パイプの破損を回避し、一貫した出力を確保するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。