1 / 23

Programación Orientada a Objetos

Programación Orientada a Objetos. Anexo 5 Streams. Universidad de Chile Departamento de Ciencias de la Computación. Temario. Streams El package java.io Streams de bytes y de caracteres Streams de bajo y alto nivel Leyendo y escribiendo Sockets. Streams.

isaura
Télécharger la présentation

Programación Orientada a Objetos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programación Orientada a Objetos Anexo 5 Streams Universidad de Chile Departamento de Ciencias de la Computación

  2. Temario • Streams • El package java.io • Streams de bytes y de caracteres • Streams de bajo y alto nivel • Leyendo y escribiendo • Sockets

  3. Streams • Los Streams son interfaces que permiten ver de una manera común los diferentes elementos de entrada / salida (archivos, teclado/pantalla, sockets, etc.) • Un stream de entrada: • Un stream de salida:

  4. El Package java.io • Las clases de entrada / salida del paquete java.io: • ocultan la complejidad de las operaciones de bajo nivel • aíslan al programador de los detalles específicos del sistema operativo • proveen una manera consistente de representar la entrada / salida

  5. Las clases de streams del paquete java.io se encuentran divididas en 4 jerarquías de clases, dependiendo de si son de entrada o salida, y del tipo de datos sobre el que operan (bytes o caracteres) El Package java.io

  6. Streams de Caracteres Métodos operan sobre (arreglos de) caracteres Contiene caracteres Unicode de 16-bit Implementado por clases Reader y Writer Manejan buffers Streams Byte v/s Character Streams de Bytes Métodos operan sobre (arreglos de) bytes Contiene bytes de 8-bit Implementado por clases InputStream y OutputStream No manejan buffers

  7. Reader y InputStream • Clases abstractas para leer caracteres y bytes • Reader permite leer streams de caracteres • InputStream permite leer streams de bytes • Métodos básicos Reader: • int read() • int read(char[] cbuf) • abstract int read(char[] cbuf, int off, int len) • Métodos básicos InputStream: • abstract int read() • int read(byte[] bbuf) • int read(byte[] bbuf, int off, int len)

  8. Writer y OutputStream • Clases abstractas para escribir caracteres y bytes • Writer permite escribir streams de caracteres • OutputStream permite escribir streams de bytes • Métodos básicos Writer: • void write(int c) • void write({char[]|String} cbuf) • abstract void write({char[]|String} cbuf, int off, int len) • Métodos básicos OutputStream: • abstract void write(int b) • void write(byte[] bbuf) • void write(byte[] bbuf, int off, int len)

  9. Streams de Caracteres

  10. Streams de Bytes

  11. Streams conectados directamente a fuenteso destinos de información (en gris en las jerarquías anteriores) Streams Conectados a Datos

  12. Streams que operan sobre otros streams, agregando funcionalidad, convirtiendo información, etc. (en blanco en las jerarquías anteriores) Encadenamiento de Streams

  13. Copiando un Archivo import java.io.*; public class Copy { public static void main(String[] args) throws IOException { FileReader in = new FileReader("data.txt"); FileWriter out = new FileWriter("out.txt"); int c; while ((c = in.read()) != -1) { out.write(c); } in.close(); out.close(); } }

  14. Encadenando Streams • Los streams están basados en el patrón de diseño Decorador, que permite agregar responsabilidades a los objetos de manera dinámica y transparente • Las clases FilterReader, FilterWriter, FilterInputStream y FilterOutputStream son clases base para decoradores: • Manejan la referencia al stream“encadenado”, y le delegan losrequerimientos • Los decoradores concretosagregan o modifican funcionalidad • Los decoradores tienen la mismainterfaz que los componentes“decorados”, de modo que parael cliente es transparente si estáoperando con un componentedecorado o no

  15. Leyendo de un Archivo • El siguiente código permite leer por líneas de un archivo: FileReader fr = null; BufferedReader br = null; try { fr = new FileReader("/home/archivo.txt"); br = new BufferedReader(fr); String s; while ((s = br.readLine()) != null) { ... } } finally { if (fr != null) { fr.close(); } }

  16. Leyendo del Teclado • El siguiente código permite leer por líneas lo que el usuario escribe en el teclado: InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); try { System.out.print("Ingrese su nombre: "); String name = br.readLine( ); System.out.print("Ingrese su dirección: "); String address = br.readLine( ); } catch (IOException e) { System.out.println("IOException"); }

  17. PrintWriter • Escribe texto y números en formato de texto, en métodos print() y println() • El constructor de PrintWriter recibe como parámetro un objeto OutputStream, Writer, File, o String (el nombre de un archivo) FileWriter fw = new FileWriter("C:/dat/emp.dat"); PrintWriter pw = new PrintWriter(fw); String nombre = "Andrea Ramírez"; double sueldo = 1500000; pw.print(nombre); pw.print(""); pw.print(sueldo); pw.close(); fw.close();

  18. Ejemplo: Encadenando Streams • El siguiente ejemplo muestra cómo comprimir y encriptar información, escribiendo sobre un archivo: • El siguiente código genera la estructura de objetos: • FileOutputStream fos = new FileOutputStream("myfile.out"); CryptOutputStream cos = new CryptOutputStream(fos); GZIPOutputStream gos = new GZIPOutputStream(cos); • Para escribir sobre los streams encadenados se invoca el métodowrite()sobre el objeto más externo: • gos.write('a');

  19. Archivos de Acceso Directo • Las clases vistas anteriormente implementan streams de acceso secuencial • La clase RandomAccessFile implementa archivos de acceso directo, en modalidad lectura y escritura (no está conectada con el modelo de streams) • Además de los métodos de lectura y escritura, provee los siguientes métodos adicionales • int skipBytes(int n) • void seek(long pos) • long getFilePointer()

  20. Excepciones • El paquete java.io contiene un conjunto de excepciones, todas derivadas de IOException: • EOFException • FileNotFoundException • InterruptedIOException • IOException • SecurityException

  21. Clase File • Provee una abstracción de los nombres del archivo o directorio en el sistema de archivos • Provee métodos útiles para la manipulación de nombres de archivos • list() • exists() • isFile() • isDirectory() • getName() • getPath() • lastModified() • mkdir() • delete()

  22. Close • Los streams ocupan recursos del sistema operativo • Al terminar de usar un stream, hay que cerrarlo utilizando su método close() • Al cerrar un archivo se realiza un flush()

  23. Resumen • El paquetejava.iotiene dos jerarquías de streams: unapara leer/escribircaracteres (clasesReader y Writer), otrapara leer/escribir bytes (clasesInputStream y OutputStream) • Existen streams conectados directamente a fuentes y destinos de información, y streams que se encadenan a otros

More Related