| Streams | |
| Inicio | Cursos infosintesis.net liberados | Java SE | Copia de un fichero | |
| Copia de un fichero | |
| Paso 1: Operativa |
Son un paso de comunicación entre una fuente de información y un destino. Para nuestros fines, nuestro programa de Java se encuentra en un extremo del flujo.
Algoritmos de lectura y escritura
No importa de donde viene la información o donde está yendo (disco duro, Internet, otro programa) y tampoco importa que tipo de información está siendo leída o escrita, el algoritmo de lectura y de escritura es esencialmente el mismo. El modo más sencillo de usar un flujo es crearlo y llamar a sus métodos para enviar o recibir datos:
Lectura
abrir un stream |
Escritura
abrir un stream |
Jerarquía del paquete java.io dependiendo del tipo de datos
El paquete java.io contiene una colección de Clases que soportan los algoritmos mostrados anteriormente para leer y escribir datos. Estas Clases están divididas en dos jerarquías distintas dependiendo si estamos trabajando con los siguientes tipos de datos:
Caracteres
Manejan archivos de Texto y otras fuentes de texto.
Bytes
Manejan bytes, enteros y otros tipos simples de datos.
Jerarquía del paquete java.io dependiendo de la función a desempeñar
Dentro de estas dos jerarquías podemos hacer una segunda división de las Clases según su función desempeñada:
Streams que leen o escriben de una fuente de datos
| Tipo de Fuente Final | Streams de Caracteres | Streams de Bytes |
| Memoria | java.io.CharArrayReader java.io.CharArrayWriter |
java.io.ByteArrayInputStream java.io.ByteArrayOutputStream |
| java.io.StringReader java.io.StringWriter |
java.io.StringBufferInputStream | |
| Cauce o Pipe | java.io.PipedReader java.io.PipedWriter |
java.io.PipedInputStream java.io.PipedOutputStream |
| Fichero | java.io.FileReader java.io.FileWriter |
java.io.FileInputStream java.io.FileOutputStream |
Streams de conveniencia o filtros
Se logran resultados más sofisticados si se asocia un filtro con un stream antes de leer o escribir datos. Un filtro es un tipo de stream que modifica la forma en que se maneja un stream existente.
Imaginemos una represa hecha por unas nutrias en un río. La represa regula el flujo de agua desde los puntos altos hasta los puntos bajos de la corriente de agua. La represa es una especie de filtro que si se retira el agua fluye con mucho menos control.
El procedimiento para usar un filtro en un stream es el siguiente:
Los métodos a llamar en un filtro son iguales a los métodos que se llaman en un stream: por ejemplo hay métodos read() y write() tal y como los habría en un stream sin filtros.
También se puede asociar un filtro a otro filtro.
| Proceso | Stream de Caracteres | Streams de Bytes |
| Buffer | java.io.BufferedReader java.io.BufferedWriter |
java.io.BufferedInputStream java.io.BufferedOutputStream |
| Filtrado | java.io.FilterReader java.io.FilterWriter |
java.io.FilterInputStream java.io.FilterOutputStream |
| Conversión entre Bytes y Caracteres | java.io.InputStreamReader java.io.InputStreamWriter |
---------- |
| Concatenación | ---------- |
java.io.SequenceInputStream |
| Serialización de Objetos | ---------- |
java.io.ObjectInputStream java.io.ObjectOutputStream |
| Conversión de Datos | ---------- |
java.io.DataInputStream java.io.DataOutputStream |
| Contador de líneas | java.io.LineNumberReader | java.io.LineNumberInputStream |
| Impresión | java.io.PrintWriter | java.io.PrintStream |