Java - (Android) la réutilisation d'un processus de rinçage après son OutputStream

voix
47

Im essayant de le faire sur Android:

Process p = Runtime.getRuntime().exec(sh);

   DataOutputStream out = new DataOutputStream(p.getOutputStream());

   out.writeBytes(something useful\n);

   out.close();

   p.waitFor();

   out = new DataOutputStream(p.getOutputStream());

   out.writeBytes(something useful\n);

   out.close();

   p.waitFor();

La deuxième fois que j'exécute out.writeBytes (); , Je reçois un IOException java: « Numéro de fichier incorrect ». Mon application doit exécuter plusieurs programmes natifs, mais toujours utiliser le même processus. Quelqu'un sait pourquoi cela ne fonctionne pas?

Créé 28/08/2010 à 13:01
utilisateur
Dans d'autres langues...                            


2 réponses

voix
0

Lorsque vous appelez out.close(), il appellera automatiquement close()le ouputstream de votre processus.

Chaque fois que vous appelez p.getOutputStream()vous obtenez le même OutputStream, sur votre deuxième utilisation de sortir, p.getOutputStream()retourne un déjà fermé OutputStream.

Fondamentalement , avec votre code, vous n'avez pas vraiment besoin de fermer la première DataOutputStream.

Sources :

Créé 28/08/2010 à 13:12
source utilisateur

voix
1

Notez que la coquille ne fait pas partie du SDK du public (notez qu'il n'est pas documenté nulle part dans la documentation du SDK), de sorte que ce code est en effet compter sur des API privées.

Aussi cela vous met en dehors du modèle d'application normale - nous avons aucune garantie ce qui va arriver à un processus que vous avez fourchue et n'est pas géré par la plate-forme. Il peut se faire tuer à tout moment.

Ceci est aussi une façon très inefficace de faire des choses, par rapport à faire ce que la commande est en train de faire dans votre propre processus. Et à partir d'un processus distinct pour une commande ne le laissera pas faire quelque chose de plus que vous pouvez, car il fonctionne toujours comme uid.

Donc, en gros ... pour 99,99% des applications ne s'il vous plaît faire. Si vous écrivez une application de terminal ... eh bien, d'accord, seuls les geeks vont se soucier de toute façon, et il ne va pas être d'une grande utilité car il fonctionne comme uid, mais bien. Mais sinon, s'il vous plaît pas. :)

Créé 28/08/2010 à 19:23
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more