Java - (androide) La reutilización de un proceso después de lavar su OutputStream

votos
47

im tratando de hacer esto en 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 segunda vez que ejecuto out.writeBytes (); , Consigo un IOException java: número de archivo incorrecto. Mi aplicación tiene que ejecutar varios programas nativos, pero siempre utilizan el mismo proceso. Alguien sabe por qué esto no funciona?

Publicado el 28/08/2010 a las 13:01
por usuario
En otros idiomas...                            


2 respuestas

votos
0

Cuando se llama out.close(), se llamará automáticamente close()en el ouputstream de su proceso.

Cada vez que llama p.getOutputStream()se obtiene la misma OutputStream, en su segundo uso de fuera, p.getOutputStream()devuelve la ya cerrada OutputStream.

Básicamente con su código, usted realmente no necesita para cerrar la primera DataOutputStream.

fuentes:

Respondida el 28/08/2010 a las 13:12
fuente por usuario

votos
1

Tenga en cuenta que la cáscara no es parte del SDK pública (tenga en cuenta que no está documentada en cualquier parte de la documentación del SDK), por lo que este código es, en efecto, confiando en APIs privadas.

También esto le pone fuera del modelo de aplicación normal - no tenemos ninguna garantía de lo que va a pasar a un proceso que ha bifurcado y no está siendo gestionado por la plataforma. Puede ser asesinado en cualquier momento.

Esta es también una manera muy ineficiente de hacer las cosas, en comparación a hacer lo que el comando está haciendo en su propio proceso. E iniciar un proceso separado para un comando no dejar que haga nada más de lo que puede, porque todavía funciona como su UID.

Así que, básicamente ... por 99,99% de las aplicaciones por favor no hacer esto. Si usted está escribiendo una aplicación de terminal ... bueno, está bien, sólo los frikis van a preocuparse por eso de todos modos, y no va a ser de mucha utilidad ya que se ejecuta como su UID, pero está bien. Pero por lo demás, por favor, no. :)

Respondida el 28/08/2010 a las 19:23
fuente por usuario

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