Los flujos de Java
Prácticamente todos
los programas deben leer datos del exterior para procesarlos y después
presentar los resultados. La información que necesita un programa normalmente
se obtiene mediante la entrada de datos por el teclado o leyendo un fichero.
Los resultados de la ejecución de un programa se pueden presentar por la
consola, la impresora o en un fichero. El tipo de información que se utiliza
tanto en las entradas como en las salidas puede tener diversos formatos: texto,
imagen, sonido, binario, etc.
En Java, la entrada
de datos se realiza mediante un flujo de entrada. Para realizar la entrada de
datos es necesario abrir el flujo de entrada, leer la información del flujo
hasta el final y por último cerrar el flujo. La salida se hace mediante un
flujo de salida. Para realizar la salida de datos es necesario abrir el flujo
de salida y a continuación se escribe en él toda la información que se desee,
por último, se cierra el flujo.
Este esquema de
entradas y salidas basadas en un flujo permite que las entradas sean
independientes de la fuente de datos y que las salidas sean independientes del
destino de los datos.
Un flujo en Java es
un objeto que se utiliza para realizar una entrada o salida de datos.
Representa un canal de información del que se puede leer o escribir datos de
forma secuencial. Existen dos tipos de flujos en Java, los que utilizan bytes y
los que utilizan caracteres.
La siguiente tabla muestra
los flujos de entrada de datos de Java:
Flujos con bytes
|
Flujos con
caracteres
|
InputStream
ByteArrayInputStream
FileInputStream
FilterInputStream
BufferedInputStream
DataInputStream
LineNumberInputStream
PushBackInputStream
ObjectInputStream
PipedInputStream
SequenceInputStream
StringBufferInputStream
|
Reader
BufferedReader
LineNumberReader
CharArrayReader
FilterReader
PushBackReader
InputStreamReader
FileReader
PipedReader
StringReader
|
La
siguiente tabla muestra los flujos de salida de datos de Java:
Flujos con bytes
|
Flujos con caracteres
|
OutputStream
ByteArrayOutputStream
FileOutputStream
FilterOutputStream
BufferedOutputStream
DataOutputStream
PrintStream
ObjectOutputStream
PipedOutputStream
|
Writer
BufferedWriter
CharArrayWriter
FilterWriter
OutputStreamWriter
FileWriter
PipedWriter
PrintWriter
StringWriter
|
Existen flujos con
bytes y flujos con caracteres que se aplican a la misma entrada o salida. FileInputStream
y FileOutputStream son flujos para leer y escribir bytes en un fichero, FileReader
y FileWriter también son flujos que se aplican a ficheros, pero en este caso
para leer y escribir caracteres.
Los flujos se pueden
utilizar solos o combinados. Si se combinan dos flujos, por ejemplo uno que lea
caracteres de un archivo con otro que convierta a mayúsculas los caracteres,
entonces el resultado final es un flujo del que se leen caracteres en
mayúsculas.