2010-11-19 14 views

Respuesta

17

Solo puede leer desde InputStream, así que úselo para capturar el resultado de su proceso.

Usted escribe en un OutputStream, así que úselo para dar su opinión al proceso.

Está utilizando nombres que tienen sentido en el contexto del proceso generado. Pero los nombres de API tienen sentido en el contexto del proceso principal.

Aquí hay otro consejo: si su proceso escribe a error estándar, asegúrese de leer eso también. Si la salida estándar o las canalizaciones de error del subproceso están llenas (porque el proceso Java primario no las está consumiendo), el proceso hijo se bloqueará en sus llamadas write().

+7

Me parece muy confising que, por no decir defectuoso. ¿No es un patrón de diseño orientado a objetos central para nombrar métodos en el contexto del objeto que ofrece este método? – rds

3

El getOutputStream es la entrada a el proceso. El getInputStream se lee salida desde el proceso.

Consulte JavaDocs si es útil.

7

Siempre ignoro los nombres y miro lo que devuelve. Si su código tiene un OutputStream, puede escribir, lo que significa que es la entrada para el otro proceso. Si su código tiene un InputStream, puede leer de él - lo que significa que es la salida o error para el otro proceso.

Afortunadamente, el compilador le dirá si está haciendo las cosas mal - que tienes los datos que desea provde, por lo que tiene que escribir a la corriente, lo que significa que es tiene a ser el OutputStream.

0

Mire el documento. De hecho, esto es una verdadera molestia, en comparación con otros marcos que lo hacen de forma "obvia", por lo que el doctor es tu amigo.

public abstract OutputStream getOutputStream() 
> Gets the output stream of the subprocess. Output to the stream is piped into the standard input stream of the process 

debería haber sido demasiado simple para tener:

public abstract InputStream getInputStream() 
> Gets the standarinput stream of the subprocess. Output to the stream is piped into the standard input stream of the process 
Cuestiones relacionadas