Maison > Java > javaDidacticiel > le corps du texte

Comment rediriger efficacement la sortie de ProcessBuilder de manière asynchrone en Java ?

DDD
Libérer: 2024-11-23 20:38:11
original
661 Les gens l'ont consulté

How to Efficiently Redirect ProcessBuilder Output Asynchronously in Java?

Redirection de sortie asynchrone pour les processus ProcessBuilder

Lors de la construction d'un processus avec ProcessBuilder, il peut être souhaitable de capturer et de rediriger stdout et/ou stderr vers System.out de manière asynchrone. Les approches traditionnelles, telles que la création manuelle d'un thread pour une lecture continue à partir de stdOut, sont lourdes et inefficaces.

Heureusement, Java 7 a introduit la méthode ProcessBuilder.inheritIO, qui définit commodément les E/S standard du sous-processus pour qu'elles soient les mêmes. comme le processus Java actuel. Cela élimine le besoin de threads supplémentaires ou de logique de redirection de sortie complexe.

Pour Java 7 et versions ultérieures, invoquez simplement :

Process p = new ProcessBuilder().inheritIO().command("command1").start();
Copier après la connexion

Pour les versions antérieures de Java, une solution personnalisée est requise :

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

private static void inheritIO(final InputStream src, final PrintStream dest) {
    new Thread(new Runnable() {
        public void run() {
            Scanner sc = new Scanner(src);
            while (sc.hasNextLine()) {
                dest.println(sc.nextLine());
            }
        }
    }).start();
}
Copier après la connexion

Dans cette solution personnalisée, les threads sont automatiquement terminés lorsque le sous-processus se termine, lorsque le flux src atteint EOF. Cela garantit une gestion appropriée des ressources sans avoir besoin d'une gestion explicite des threads.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal