ProcessBuilder と Runtime.exec(): 違いを理解する
Java から外部コマンドを実行しようとすると、開発者は多くの場合、矛盾に遭遇します。 Runtime.exec() との間の動作ProcessBuilder.start().
Runtime.exec():
Runtime.getRuntime().exec() の使用には、トークン化と実行の 2 段階のプロセスが含まれます。 。入力文字列は実行前に解析され、引数の配列に変換されます。
ProcessBuilder:
対照的に、ProcessBuilder の動作は異なります。そのコンストラクターは、可変引数配列または文字列のリストを受け入れます。各文字列は個々の引数を表します。次に、引数は 1 つの文字列に結合され、オペレーティング システムに渡されます。
実行への影響:
この引数処理の違いは、指示。たとえば、コマンドにスペースが含まれている場合、Runtime.exec() は自動的にトークン化を処理しますが、ProcessBuilder では引数の配列またはリストを明示的に作成する必要があります。
例:
スペースを含む次のコマンドを考えてみましょう:
使用Runtime.exec():
この場合、コマンドは意図したとおりに実行され、exitValue は 0 になります。
Using ProcessBuilder:
ただし、トークン化せずに ProcessBuilder を直接使用するとエラーが発生しますまたは予期しない動作が発生し、exitValue 1001 が返されます。これを修正するには、引数配列を明示的に作成する必要があります:
概要:
一般に、 ProcessBuilder では、引数を個別のリストまたは配列として提供し、個々の引数を明示的に示すことが重要です。この追加手順により、引数が正しく解析され、外部コマンドが意図したとおりに実行されることが保証されます。
以上がRuntime.exec() と ProcessBuilder.start(): それぞれをいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。