programación orientada a objetos anexo 5 streams universidad de chile departamento de ciencias de...

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

Upload: lope-armas

Post on 28-Jan-2016

216 views

Category:

Documents


0 download

TRANSCRIPT

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

Programación Orientada a Objetos

Anexo 5Streams

Universidad de ChileDepartamento de Ciencias de la Computación

Page 2: 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

Page 3: Programación Orientada a Objetos Anexo 5 Streams Universidad de Chile Departamento de Ciencias de la Computación

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:

Page 4: Programación Orientada a Objetos Anexo 5 Streams Universidad de Chile Departamento de Ciencias de la Computación

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

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

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

Lectura Escritura

Operan sobre bytes

InputStream OutputStream

Operan sobre caracteres

Reader Writer

Page 6: Programación Orientada a Objetos Anexo 5 Streams Universidad de Chile Departamento de Ciencias de la Computación

6

Streams Byte v/s Character

Streams Streams de de CaracteresCaracteres

Métodos operan sobre (arreglos de) caracteres

Contiene caracteres Unicode de 16-bit16-bit

Implementado por clases ReaderReader y WriterWriter

Manejan buffers

Streams Streams de de ByteBytess Métodos operan

sobre (arreglos de) bytes

Contiene bytes de 8-bit8-bit

Implementado por clases InputStreamInputStream y OutputStreamOutputStream

No manejan buffers

Page 7: Programación Orientada a Objetos Anexo 5 Streams Universidad de Chile Departamento de Ciencias de la Computación

7

Reader y InputStream

Clases abstractas para leer caracteres y bytes ReaderReader permite leer streams de caracteres InputStreamInputStream permite leer streams de bytes

Métodos básicos ReaderReader: int read() int read(char[] cbuf) abstract int read(char[] cbuf, int off, int len)

Métodos básicos InputStreamInputStream: abstract int read() int read(byte[] bbuf) int read(byte[] bbuf, int off, int len)

Page 8: Programación Orientada a Objetos Anexo 5 Streams Universidad de Chile Departamento de Ciencias de la Computación

8

Writer y OutputStream

Clases abstractas para escribir caracteres y bytes WriterWriter permite escribir streams de caracteres OutputStreamOutputStream permite escribir streams de bytes

Métodos básicos WriterWriter: void write(int c) void write({char[]|String} cbuf) abstract void write({char[]|String} cbuf, int off, int len)

Métodos básicos OutputStreamOutputStream: abstract void write(int b) void write(byte[] bbuf) void write(byte[] bbuf, int off, int len)

Page 9: Programación Orientada a Objetos Anexo 5 Streams Universidad de Chile Departamento de Ciencias de la Computación

9

Streams de Caracteres

Page 10: Programación Orientada a Objetos Anexo 5 Streams Universidad de Chile Departamento de Ciencias de la Computación

10

Streams de Bytes

Page 11: Programación Orientada a Objetos Anexo 5 Streams Universidad de Chile Departamento de Ciencias de la Computación

11

Streams Conectados a Datos

Streams conectados directamente a fuentes o destinos de información (en gris en las jerarquías anteriores)

Clases Fuente o destino de datos

FileReader, FileWriter, FileInputStream, FileOutputStream

Archivos

PipedReader, PipedWriter, PipiedInputStream, PipedOutputStream

Pipes: un thread lee en un PipedReader lo que otro escribe en un PipedWriter

CharArrayReader, CharArrayWriter

Arreglos de caracteres

StringReader, StringWriter Strings

ByteArrayInputStream, ByteArrayOutputStream

Arreglos de bytes

Page 12: Programación Orientada a Objetos Anexo 5 Streams Universidad de Chile Departamento de Ciencias de la Computación

12

Encadenamiento de Streams Streams que operan sobre otros streams, agregando

funcionalidad, convirtiendo información, etc. (en blanco en las jerarquías anteriores)

Clases Descripción

FilterReader, FilterWriter, FilterInputStream, FilterOutputStream

Clases base para la implementación del patrón de diseño Decorator; los métodos simplemente delegan los requerimientos en el stram “conectado”.

BufferedReader, BufferedWriter, BufferedInputStream, BufferedOutputStream

Manejan buffers. BufferedReader agrega además un método readLine().

LineNumberReader, LineNumberInputStream

Agregan el método getLineNumber().

InputStreamReader, OutputStreamWriter Proveen conversión entre bytes y caracteres.

PushbackReader, PushbackInputStream Agregan métodos unread().

SequenceInputStream InputStream que lee desde una secuencia de objetos InputStream.

PrintWriter, PrintStream Agregan métodos para escribir objetos formateadamente.

DataInputStream, DataOutputStream Proveen métodos para leer y escribir tipos primitivos.

ObjectInputStream, ObjectOutputStream Proveen manejo de serialización.

Page 13: Programación Orientada a Objetos Anexo 5 Streams Universidad de Chile Departamento de Ciencias de la Computación

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(); }}

Page 14: Programación Orientada a Objetos Anexo 5 Streams Universidad de Chile Departamento de Ciencias de la Computación

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

Page 15: Programación Orientada a Objetos Anexo 5 Streams Universidad de Chile Departamento de Ciencias de la Computación

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(); }}

Page 16: Programación Orientada a Objetos Anexo 5 Streams Universidad de Chile Departamento de Ciencias de la Computación

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");}

Page 17: Programación Orientada a Objetos Anexo 5 Streams Universidad de Chile Departamento de Ciencias de la Computación

17

Escribe texto y números en formato de texto, en métodos print()print() y println()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();

PrintWriter

Page 18: Programación Orientada a Objetos Anexo 5 Streams Universidad de Chile Departamento de Ciencias de la Computación

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étodo write()write() sobre el objeto más externo:

gos.write('a');

Page 19: Programación Orientada a Objetos Anexo 5 Streams Universidad de Chile Departamento de Ciencias de la Computación

19

Archivos de Acceso Directo

Las clases vistas anteriormente implementan streams de acceso secuencial

La clase RandomAccessFileRandomAccessFile 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()

Page 20: Programación Orientada a Objetos Anexo 5 Streams Universidad de Chile Departamento de Ciencias de la Computación

20

El paquete java.io contiene un conjunto de excepciones, todas derivadas de IOException: EOFException EOFException FileNotFoundException FileNotFoundException InterruptedIOExceptionInterruptedIOException IOException IOException SecurityExceptionSecurityException

Excepciones

Page 21: Programación Orientada a Objetos Anexo 5 Streams Universidad de Chile Departamento de Ciencias de la Computación

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

getName()getName() getPath()getPath() lastModified()lastModified() mkdir()mkdir() delete()delete()

list()list() exists()exists() isFile()isFile() isDirectory()isDirectory()

Page 22: Programación Orientada a Objetos Anexo 5 Streams Universidad de Chile Departamento de Ciencias de la Computación

22

Close

Los streams ocupan recursos del sistema operativo

Al terminar de usar un stream, hay que cerrarlo utilizando su método close()close()

Al cerrar un archivo se realiza un flush()flush()

Page 23: Programación Orientada a Objetos Anexo 5 Streams Universidad de Chile Departamento de Ciencias de la Computación

23

El paquete java.iojava.io tiene dos jerarquías de streams: una para leer/escribir caracteres (clases ReaderReader y WriterWriter), otra para leer/escribir bytes (clases InputStreamInputStream y OutputStreamOutputStream)

Existen streams conectados directamente a fuentes y destinos de información, y streams que se encadenan a otros

Resumen