DPO3_U1_A1
Short Description
Descripción: programacion orientada a objetos 3...
Description
Introducción La información que necesita un programa para su función se obtiene mediante una entrada de datos de una fuente que puede ser de tipos muy variados: desde el teclado, un archivo, una comunicación de red, un objeto en internet, etc. Cuando el programa genera los resultados como salida de la ejecución puede hacerlo de muy diversas maneras: en un archivo, en la pantalla, en una impresora, etc. En java la entrada de los datos se realiza mediante un flujo de entrada. La salida de datos realiza mediante un flujo de salida.
Cualquier programa realizado en Java que necesite llevar a cabo una operación de I/O lo hará a través de un stream. Un stream, cuya traducción literal es "flujo", es una abstracción de todo aquello que produzca o consuma información. Podemos ver a este stream como una entidad lógica. La vinculación de este stream al dispositivo físico la hace el sistema de entrada y salida de Java. Se ve pues la eficacia de esta implementación pues las clases y métodos de I/O que necesitamos emplear son las mismas independientemente del dispositivo con el que estemos actuando, luego, el núcleo de Java, sabrá si tiene que tratar con el teclado, el monitor, un sistema de ficheros o un socket de red liberando a nuestro código de tener que saber con quién está interactuando.
ENTRADA | SALIDA 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 Los Streams se caracterizan por ser unidireccionales, es decir que un Stream se utilizara solo para leer, solo para escribir, pero no ambas acciones al mismo tiempo.
TIPOS DE FLUJOS Existen dos tipos de Flujos: -Los que trabajan con Bytes -Los que trabajan con Caracteres Las clases más importantes a tener en cuenta son las siguientes, donde el flujo de las líneas indica la herencia, es decir, DataInputStream hereda de FilterInputStream que, a su vez, hereda de InputStream.
E N T R D A A D T
Flujos con Bytes InputStream ByteArrayInputStream FileInputStream FilterInputStream BufferedInputStream DataInputStream PushbackInputStream
Flujos con caracteres Reader BufferedReader LineNumberReader CharArrayReader FilterReader PushbackReader InputStreamReader
A O S D E S A L I D D A A T O D S E
ObjectInputStream PidedInputStream SequenceInputStream StringBufferInputStream OutputStream ByteArrayOutputStream FileOutputStream FilterOutputStream BufferedOutputStream DataOutputStream PrintStream ObjectOutputStream PipedOutputStream
FileReader PidedReader StringReader Writer BufferedWriter CharArrayWriter FilterWriter OutputStreamWriter FileWriter PidedWriter PrintWriter StringWriter
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) Los Streams de Bytes como su nombre lo indica trabaja con bytes. Los bytes a leer se leeran en forma unitaria(es decir 8 bits por byte). 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): Los Streams de caracteres operan con caracteres como unidad de trabajo. Los caracteres a leer están formados por 2 bytes(es decir 16 bits por carácter). 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: 1.
- La clase del objeto.
2.
- Los miembros de la clase (atributos).
3.
- 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:
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
Salida
Aplicación para leer en un archivo mediante la utilización de la clase ObjectInputString
Salida
Fuentes UNADM. (2017). Archivos. 2017, de UNADM Sitio https://unadmexico.blackboard.com/bbcswebdav/institution/DCEIT/2016_S1B2/DS/04/DPO3/U1/Unidad_1_Archivos.pdf
web:
Juan Pavón Mestras. (2007). Entrada y Salida en Java. 2017, de Universidad Complutense Madrid Sitio web: https://www.fdi.ucm.es/profesor/jpavon/poo/2.13.EntradaySalida.pdf Ciber Áula. (2016). Entrada/Salida (I/O): Leer y Escribir en Java. 2017, de Ciber Áula Sitio web: http://java.ciberaula.com/articulo/java_io García, J. Et al (2000). Aprenda Java como si estuviera en primero Sánchez, J. (2004). Java 2 Marjury Díaz. (2015). Flujos de Entrada y Salida en Java. 2017, de Blogspot Sitio web: http://poo-gr2-marju.blogspot.mx/2015/06/flujos-de-entrada-y-salida-en-java.html
View more...
Comments