Programación Orientada a Objetos



Descargar 14,17 Kb.
Fecha de conversión04.06.2017
Tamaño14,17 Kb.

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

  • 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:

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

El Package java.io

  • 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)
  • Lectura
  • Escritura
  • Operan sobre bytes
  • InputStream
  • OutputStream
  • Reader
  • Writer

Streams Byte v/s Character

  • 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 de Bytes
  • Métodos operan sobre (arreglos de) bytes
  • Contiene bytes de 8-bit
  • Implementado por clases InputStream y OutputStream
  • No manejan buffers

Reader y InputStream

  • Clases abstractas para leer caracteres y 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)

Writer y OutputStream

  • Clases abstractas para escribir caracteres y 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)

Streams de Caracteres

Streams de Bytes

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
  • CharArrayReader, CharArrayWriter
  • Arreglos de caracteres
  • StringReader, StringWriter
  • Strings
  • ByteArrayInputStream, ByteArrayOutputStream
  • Arreglos de bytes

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.

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

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:
  • Los decoradores tienen la misma interfaz que los componentes “decorados”, de modo que para el cliente es transparente si está operando con un componente decorado o no

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

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

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

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() sobre el objeto más externo:
    • gos.write('a');

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

Excepciones

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

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()
    • getPath()
    • lastModified()
    • mkdir()
    • delete()
    • list()
    • exists()
    • isFile()
    • isDirectory()

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

Resumen

  • El paquete java.io tiene dos jerarquías de streams: una para leer/escribir caracteres (clases Reader y Writer), otra para leer/escribir bytes (clases InputStream y OutputStream)
  • Existen streams conectados directamente a fuentes y destinos de información, y streams que se encadenan a otros


La base de datos está protegida por derechos de autor ©absta.info 2016
enviar mensaje

    Página principal