¿QUÉ ES UN FLUJO O STREAM?
La entrada (input) y salida (output) en java se implementa en el paquete java.io
En términos de programación se denomina entrada a la posibilidad de introducir datos hacia un programa; salida sería la capacidad de un programa de mostrar información al usuario.
La E/S en java se basa en el concepto de flujo o denominado STREAM.
El flujo es una secuencia ordenada de datos que tiene una fuente (flujos de entrada) o un destino (flujos de salida).
Los streams soportan varios tipos de datos:
- bytes simples, tipos de datos primitivos, caracteres localizados, y objetos
En Java se accede a la E/S estándar a través de campos estáticos de la clase java.lang.System
- System.in implementa la entrada estándar
- System.out implementa la salida estándar
- System.err implementa la salida de error
TIPOS DE STREAMS
La API de Java diferencia entre los streams de caracteres y streams de bytes.
- Streams de bytes (InputStream y OutputStream)
Son utilizados para leer y escribir información que esta almacenada en forma binaria, como por ejemplo archivos.
La Superclase utilizada para leer streams orientados a byte es la clase InputStream. A partir de esta clase - la cual es abstracta – heredan todas las clases concretas que se utilizan para leer información en forma binaria.
La superclase utilizada para escribir streams orientados a bytes es la clase OutputStream. A partir de esta clase - la cual es abstracta – heredan todas las clases concretas que se utilizan para escribir información en forma binaria.
- Streams de caracteres (Reader y Writer):
Son utilizados para leer y escribir información que esta almacenada en forma de texto, como por ejemplo archivos.
La Superclase utilizada para leer streams orientados a carácter es la clase Reader. A partir de esta clase - la cual es abstracta – heredan todas las clases concretas que se utilizan para leer información en forma textual.
La Superclase utilizada para escribir streams orientados a carácter es la clase Writer. A partir de esta clase - la cual es abstracta – heredan todas las clases concretas que se utilizan para escribir información en forma textual.
EXCEPCIÓN
La excepción que es lanzada cuando algún tipo de operación I/O ha fallado es IOException. Esta excepción debe de ser tratada ya sea manejándola con un bloque de código try-catch en el mismo momento que se realice la operación o dejando que se propague hacia arriba en la pila de llamadas utilizando throws IOException.
SERIALIZACIÓN
La serialización de un objeto consiste en obtener una secuencia de bytes que represente el estado de dicho objeto. Esta secuencia puede utilizarse de varias maneras (puede enviarse a través de la red, guardarse en un fichero para su uso posterior, utilizarse para recomponer el objeto original, etc.).
Para poder transformar el objeto en una secuencia de bytes, el objeto debe ser serializable.
Un objeto es serializable si su clase implementa la interface Serializable.
La interface Serializable se encuentra en el paquete java.io Es una interface vacía. No contiene ningún método.
ESCRITURA DE OBJETOS EN UN FICHERO BINARIO
Para escribir objetos en un fichero binario en Java se utiliza la clase ObjectOutputStream derivada de OutputStream.
Un objeto ObjectOutputStream se crea a partir de un objeto FileOutputStream asociado al fichero.
El constructor de la clase es:
ObjectOutputStream(OutputStream nombre);
Lanza una excepción IOException.
La clase proporciona los siguientes métodos:
- método writeObject(Object objeto) para escribir el objeto en el fichero.
- método defaultWriteObject() de la clase ObjectOutputStream realiza de forma automática la serialización de los objetos de una clase. Este método se invoca en el método writeObject().
- defaultWriteObject() escribe en el stream de salida todo lo necesario para reconstruir los objetos:
- - La clase del objeto.
- - Los miembros de la clase (atributos).
- - Los valores de los atributos que no sean static o transient.
LECTURA DE OBJETOS EN UN FICHERO BINARIO
Para leer los objetos contenidos en un fichero binario que han sido almacenados mediante ObjectOutputStream se utiliza la clase ObjectInputStream derivada de InputStream.
Un objeto ObjectInputStream se crea a partir de un objeto FileInputStream asociado al fichero.
El constructor de la clase es:
ObjectInputStream(InputStream nombre);
Lanza una excepción IOException.
La clase proporciona el método readObject() que devuelve el objeto del fichero (tipo Object).
Es necesario hacer un casting para guardarlo en una variable del tipo adecuado.
Es necesario cerrar el flujo de bytes de salida para esto se usa el método close().
EJEMPLO:
EJEMPLO:
Escribir y guardar en un archivo los datos de un paciente, para luego poder leerlos mediante la utilización de flujos de entrada y salida.
1. Creación de la Clase Paciente
La clase Paciente implementa la interfaz Serializable, la cual le permite la transformación de un objeto en una secuencia de bytes que pueden ser posteriormente leídos para reconstruir el objeto original.
Esta Clase presenta 5 atributos: Documento, nombre, género, fecha de nacimiento y la cantidad de pacientes.
Se crea los respectivos constructores de la clase, al igual que los métodos getters y setters de cada atributo.
Finalmente se sobreescribe el método TosString.
A continuación se muestra la clase Paciente realizada en NETBEANS.
Aplicación para escribir en un archivo mediante la utilización de la clase ObjectOutputInputString
Aplicación para leer en un archivo mediante la utilización de la clase ObjectInputString
Salida
muy buen trabajo gracias por la información :D
ResponderEliminarme ayudo mucho :p
no+
ResponderEliminar