Rumah > Java > javaTutorial > teks badan

Runtime.exec() vs. ProcessBuilder.start(): Bilakah Saya Perlu Menggunakan Setiap?

Susan Sarandon
Lepaskan: 2024-11-13 15:22:02
asal
756 orang telah melayarinya

Runtime.exec() vs. ProcessBuilder.start(): When Should I Use Each?

ProcessBuilder vs. Runtime.exec(): Memahami Perbezaan

Apabila cuba melaksanakan arahan luaran daripada Java, pembangun sering menghadapi percanggahan dalam tingkah laku antara Runtime.exec() dan ProcessBuilder.start().

Runtime.exec():

Menggunakan Runtime.getRuntime().exec() melibatkan proses dua langkah: tokenisasi dan pelaksanaan . Rentetan input dihuraikan dan ditukar kepada tatasusunan argumen sebelum dilaksanakan.

ProcessBuilder:

Sebaliknya, ProcessBuilder beroperasi secara berbeza. Pembinanya menerima tatasusunan varargs atau senarai rentetan, di mana setiap rentetan mewakili hujah individu. Argumen kemudiannya digabungkan menjadi satu rentetan yang dihantar ke sistem pengendalian.

Kesan ke atas Perlaksanaan:

Perbezaan dalam pengendalian hujah ini boleh memberi kesan kepada pelaksanaan perintah. Sebagai contoh, jika arahan termasuk ruang, Runtime.exec() akan mengendalikan tokenisasi secara automatik, manakala ProcessBuilder memerlukan secara eksplisit mencipta tatasusunan argumen atau senarai.

Contoh:

Pertimbangkan arahan berikut dengan ruang:

"C:\DoStuff.exe -arg1 -arg2"
Salin selepas log masuk

Menggunakan Runtime.exec():

Process p = Runtime.getRuntime().exec("C:\DoStuff.exe -arg1 -arg2");
Salin selepas log masuk

Dalam kes ini, arahan akan dilaksanakan seperti yang dimaksudkan, dan exitValue akan menjadi 0.

Menggunakan ProcessBuilder:

Process p = (new ProcessBuilder("C:\DoStuff.exe -arg1 -arg2")).start();
Salin selepas log masuk

Walau bagaimanapun, menggunakan ProcessBuilder secara langsung tanpa tokenisasi akan menghasilkan ralat atau tingkah laku yang tidak dijangka, mengembalikan nilai keluar 1001. Untuk membetulkannya, anda mesti mencipta tatasusunan hujah secara eksplisit:

Process p = (new ProcessBuilder("C:\DoStuff.exe", "-arg1", "-arg2")).start();
Salin selepas log masuk

Ringkasan:

Secara amnya, apabila menggunakan ProcessBuilder, adalah penting untuk menyediakan argumen sebagai senarai atau tatasusunan yang berasingan, secara eksplisit menunjukkan setiap hujah individu. Langkah tambahan ini memastikan bahawa hujah dihuraikan dengan betul dan perintah luaran dilaksanakan seperti yang dimaksudkan.

Atas ialah kandungan terperinci Runtime.exec() vs. ProcessBuilder.start(): Bilakah Saya Perlu Menggunakan Setiap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan