OutputStream y InputStream que significa y como trabaja

Socket socket = new Socket(maquina, puerto);
OutputStream os = socket.getOutputStream();
InputStream is = socket.getInputStream();
ObjectOutputStream out = new ObjectOutputStream(os);
ObjectInputStream in = new ObjectInputStream(is);

PeticionSerializable ps = new PeticionSerializable();
RespuestaSerializable rs;

// Escribir una petición en el socket
out.writeObject(ps);
// Recibir del socket la respuesta
rs = (RespuestaSerializable)in.readObject();

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

OutputStream representa un

OutputStream representa un flujo de bytes a donde se va a escribir algo, un flujo de salida:


"This abstract class is the superclass of all classes representing an output stream of bytes. An output stream accepts output bytes and sends them to some sink.
Applications that need to define a subclass of OutputStream must always provide at least a method that writes one byte of output."

Son las subclases las que hacen que esta clase sea interesante, por ejemplo si se necesita escribir a un archivo, la subclase: java.io.FileOutputStream sabe como abrir y escribir en un archivo del sistema operativos. En el caso que pones en el ejemplo, la subclase concreta es la devuelta por el método   que en este caso va a escribir bytes a una máquina remota usando precisamente sockets.

La interesante está cuando se encadenan distintos stream para hacer el trabajo, por ejemplo en el mismo código que pones la siguiente subclase es un ObjectOutputStream que se especializa en saber como tomar una instancia y convertirla en una secuencia de bytes.

Al combinarlo se tiene que todo el objeto es enviado a otra máquina.

InputStream es el similar pero se usa para leer.



"This abstract class is the superclass of all classes representing an input stream of bytes.
Applications that need to define a subclass of InputStream must always provide a method that returns the next byte of input."

Cada subclase sabe exactamente como tomar un byte ( en la mayoría de los casos un arreglo de bytes ) y escribirlo o leerlo al destino, puede ser un socket, un archivo, un zip, o un buffer en memoria, etc.