La clase java.io.InputStream sirve de clase base para todas las clases que modelan los canales de entrada. Los métodos descritos por esta clase leen correctamente los datos independientemente de la fuente de lectura.
Por cada tipo de fuente de datos se tiene una subclase de InputStream.
Los métodos de la clase InputStream son bloqueantes, esto quiere decir que no se salta a la siguiente instrucción hasta que la operación de lectura ha sido realizada.
Clases según el canal de entrada:
ByteArrayInputStream: La entrada es un buffer de memoria.
StringBufferInputStream: El fuente es un String.
FileInputStream: La fuente es un fichero.
PipedInputStream: La entrada es un pipeline de salida.
SequenceInputStream: Convierte una secuencia de InputStream en uno solo.
FilterInputStream: Define el interface para filtros de streams, que filtran los datos que están siendo leídos.
La clase java.io.OutputStream es la encargada de definir los métodos de escritura de datos, independientemente del dispositivo sobre el que se trabaje.
Es una clase abstracta, por lo que no podremos crear un objeto de esta clase directamente, sino crear objetos de sus clases derivadas (hijas).
Clases según el canal de salida. Para cada una de los destinos de datos se tiene una subclase de OutputStream:
ByteArrayOutputStream: Escribe en un buffer de memoria.
FileOutputSteam: Escribe en un fichero.
PipedOutputStream: Enlaza con su PipedInputStream.
FilterOutputStream: Define el interface para filtros de streams, que filtran los datos que están siendo escritos.
Se puede profundizar mucho más. Como siempre recomendar el tutorial de Sun traducido, Programacion.com. En él se puede estudiar como Java suministra una serie de clases que proporcionan distintas funcionalidades a los canales de entrada y de salida. Se pueden colocar en capas para suministrar más de una funcionalidad a la vez.
Algunos estratos para los canales de lectura:
DataInputStream: Prepara al canal de entrada para recoger valores primitivos (int,char,long,etc.).
BufferedInputStream: Evita que en cada operación de lectura se efectúe una lectura física. Crea un buffer interno.
LineNumberInputStream: Lleva la cuenta del número de líneas que ha sido leídas.
PushbackInputStream: Permite reinsertar caracteres leídos en el canal de entrada.
Algunos estratos para los canales de salida:
DataOutputStream: Prepara al canal de salida para recoger valores primitivos (int,char,long,etc.).
PrintStream: Para producir salida inteligible (un fichero de texto).
BufferedOutputStream: Para que todas las opereaciones utilicen un buffer de memoria.
Veamos ejemplos de uso de canales, tanto de entrada como de salida, y estratos.
Puedes hacen ping a esta entrada con la dirección http://www.error500.net/cgi-bin/mt/mt-tb.cgi/350 .