cari
RumahJavajavaTutorialBagaimana untuk Mencapai Ubah Arah Output Tidak Menyekat untuk ProcessBuilder?

How to Achieve Non-Blocking Output Redirection for ProcessBuilder?

Ubah Hala Keluar Tanpa Sekat untuk ProcessBuilder

Untuk melaksanakan proses dalam Java, ProcessBuilder menawarkan pendekatan yang mudah. Walau bagaimanapun, cabaran timbul apabila kita perlu mengubah hala strim stdout dan stderr secara tak segerak bagi proses yang dilaksanakan ke System.out.

Asynchronous Redirection using Thread

Satu kaedah biasa melibatkan penumbuhan benang baharu secara manual yang membaca secara berterusan daripada stdOut dan menulis ke Sistem.keluar. Walaupun berfungsi, pendekatan ini mencipta overhed pengurusan benang tambahan.

Penyelesaian Elegan dengan ProcessBuilder.inheritIO

Jika Java 7 atau lebih baru tersedia, ProcessBuilder menyediakan yang lebih ringkas dan lebih elegan penyelesaian: ProcessBuilder.inheritIO. Kaedah ini menetapkan strim I/O standard subproses untuk mewarisi proses Java induk.

Menggunakan inheritIO adalah mudah:

Process p = new ProcessBuilder().inheritIO().command("command1").start();

Alternatif untuk Versi Java Terdahulu

Untuk versi Java sebelum 7, pelaksanaan berikut boleh digunakan:

import java.io.*;
import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class NonBlockingOutputRedirection {
    public static void main(String[] args) throws Exception {
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        Process p = Runtime.getRuntime().exec("cmd /c dir");
        inheritIO(p.getInputStream(), System.out, executorService);
        inheritIO(p.getErrorStream(), System.err, executorService);
    }

    private static void inheritIO(final InputStream src, final PrintStream dest, ExecutorService executorService) {
        executorService.execute(() -> {
            Scanner scanner = new Scanner(src);
            while (scanner.hasNextLine()) {
                dest.println(scanner.nextLine());
            }
        });
        executorService.shutdown();
    }
}

Kelebihan Kaedah ini

Kaedah ini menawarkan beberapa kelebihan:

  • Asynchronous: Ubah hala keluaran berlaku di latar belakang, membebaskan yang utama benang.
  • Penamatan Benang Automatik: Apabila subproses selesai, urutan yang bertanggungjawab untuk pengalihan semula output akan ditamatkan secara automatik disebabkan oleh akhir fail pada aliran input.

Secara keseluruhannya, menggunakan ProcessBuilder.inheritIO dalam Java 7 atau lebih baru, atau pelaksanaan alternatif untuk versi terdahulu, menyediakan yang bersih dan cekap cara untuk mencapai pengalihan keluaran tanpa sekatan untuk proses yang dimulakan dengan ProcessBuilder.

Atas ialah kandungan terperinci Bagaimana untuk Mencapai Ubah Arah Output Tidak Menyekat untuk ProcessBuilder?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
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
Bagaimanakah JVM menyumbang kepada kemampuan 'Write Once, Run, di mana -mana' Java?Bagaimanakah JVM menyumbang kepada kemampuan 'Write Once, Run, di mana -mana' Java?May 02, 2025 am 12:25 AM

JVM melaksanakan ciri-ciri Wora Java melalui tafsiran bytecode, API bebas platform dan pemuatan kelas dinamik: 1. Bytecode ditafsirkan sebagai kod mesin untuk memastikan operasi silang platform; 2. Perbezaan sistem operasi abstrak API standard; 3. Kelas dimuatkan secara dinamik pada masa runtime untuk memastikan konsistensi.

Bagaimanakah versi baru Java menangani isu-isu khusus platform?Bagaimanakah versi baru Java menangani isu-isu khusus platform?May 02, 2025 am 12:18 AM

Versi terbaru Java berkesan menyelesaikan masalah khusus platform melalui pengoptimuman JVM, penambahbaikan perpustakaan standard dan sokongan perpustakaan pihak ketiga. 1) Pengoptimuman JVM, seperti ZGC Java11 meningkatkan prestasi pengumpulan sampah. 2) Penambahbaikan perpustakaan standard, seperti sistem modul Java9 yang mengurangkan masalah berkaitan platform. 3) Perpustakaan pihak ketiga menyediakan versi yang dioptimumkan platform, seperti OpenCV.

Terangkan proses pengesahan bytecode yang dilakukan oleh JVM.Terangkan proses pengesahan bytecode yang dilakukan oleh JVM.May 02, 2025 am 12:18 AM

Proses pengesahan bytecode JVM termasuk empat langkah utama: 1) Periksa sama ada format fail kelas mematuhi spesifikasi, 2) mengesahkan kesahihan dan ketepatan arahan bytecode, 3) melakukan analisis aliran data untuk memastikan keselamatan jenis, dan 4) mengimbangi ketelitian dan prestasi pengesahan. Melalui langkah -langkah ini, JVM memastikan bahawa hanya selamat, bytecode yang betul dilaksanakan, dengan itu melindungi integriti dan keselamatan program.

Bagaimanakah kemerdekaan platform memudahkan penggunaan aplikasi Java?Bagaimanakah kemerdekaan platform memudahkan penggunaan aplikasi Java?May 02, 2025 am 12:15 AM

Java'splatformindependenceAllowsApplicationStoranyoperatingsystemwithajvm.1) singlecodebase: writeandcompileonceforallplatforms.2) Easyupdates: UpdateTecodeForsimulteUseUlyDeployment.3)

Bagaimanakah kemerdekaan platform Java berkembang dari masa ke masa?Bagaimanakah kemerdekaan platform Java berkembang dari masa ke masa?May 02, 2025 am 12:12 AM

Kemerdekaan platform Java terus dipertingkatkan melalui teknologi seperti JVM, kompilasi JIT, penyeragaman, generik, ekspresi Lambda dan Projectpanama. Sejak tahun 1990-an, Java telah berkembang dari JVM asas kepada JVM moden berprestasi tinggi, memastikan konsistensi dan kecekapan kod di platform yang berbeza.

Apakah beberapa strategi untuk mengurangkan isu khusus platform dalam aplikasi Java?Apakah beberapa strategi untuk mengurangkan isu khusus platform dalam aplikasi Java?May 01, 2025 am 12:20 AM

Bagaimanakah Java mengurangkan masalah khusus platform? Java melaksanakan platform bebas melalui JVM dan perpustakaan standard. 1) Gunakan bytecode dan JVM untuk abstrak perbezaan sistem operasi; 2) Perpustakaan standard menyediakan API silang platform, seperti laluan fail pemprosesan kelas Paths, dan pengekodan aksara pemprosesan kelas charset; 3) Gunakan fail konfigurasi dan ujian pelbagai platform dalam projek sebenar untuk pengoptimuman dan debugging.

Apakah hubungan antara kebebasan platform Java dan seni bina microservices?Apakah hubungan antara kebebasan platform Java dan seni bina microservices?May 01, 2025 am 12:16 AM

Java'splatformindependenceEnhancesMicroservicesarchitectureByOfferingDeploymentflexability, konsistensi, skalabilitas, andPortability.1) DeploymentflexabilityAllowsMicroserviceStorunonAnanyplatformWithAjvm.2) ConsistencyAcsServicSservicesSimpliesDevelanDanDevelan

Bagaimanakah GraalVM berkaitan dengan matlamat kemerdekaan platform Java?Bagaimanakah GraalVM berkaitan dengan matlamat kemerdekaan platform Java?May 01, 2025 am 12:14 AM

GraalVM meningkatkan kemerdekaan platform Java dalam tiga cara: 1. 2. Persekitaran Runtime Bebas, menyusun program Java ke dalam fail boleh laku tempatan melalui GraalvmnativeImage; 3. Pengoptimuman Prestasi, Graal Compiler menjana kod mesin yang cekap untuk meningkatkan prestasi dan konsistensi program Java.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

MantisBT

MantisBT

Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.