La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Programación Orientada a Objetos

Presentaciones similares


Presentación del tema: "Programación Orientada a Objetos"— Transcripción de la presentación:

1 Programación Orientada a Objetos
Fast Track to Java Unit 1: Overview and Positioning Programación Orientada a Objetos Anexo 5 Streams Universidad de Chile Departamento de Ciencias de la Computación Profesor: Juan Claudio Navarro

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

3 Unit 1: Overview and Positioning
Fast Track to Java Unit 1: Overview and Positioning 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 Unit 1: Overview and Positioning
Fast Track to Java Unit 1: Overview and Positioning 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 Unit 1: Overview and Positioning
Fast Track to Java Unit 1: Overview and Positioning 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 Operan sobre caracteres Reader Writer

6 Streams Byte v/s Character
Fast Track to Java Unit 1: Overview and Positioning 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 Streams de Caracteres Métodos operan sobre (arreglos de) caracteres Contiene caracteres Unicode de 16-bit Implementado por clases Reader y Writer Manejan buffers

7 Unit 1: Overview and Positioning
Fast Track to Java Unit 1: Overview and Positioning 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 Unit 1: Overview and Positioning
Fast Track to Java Unit 1: Overview and Positioning 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 a Datos
Fast Track to Java Unit 1: Overview and Positioning 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

12 Encadenamiento de Streams
Fast Track to Java Unit 1: Overview and Positioning 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.

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 los requerimientos Los decoradores concretos agregan o modifican funcionalidad 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

15 Unit 1: Overview and Positioning
Fast Track to Java Unit 1: Overview and Positioning 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 Unit 1: Overview and Positioning
Fast Track to Java Unit 1: Overview and Positioning 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 Unit 1: Overview and Positioning
Fast Track to Java Unit 1: Overview and Positioning 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 = ; 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étodo write() 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 getName() getPath() lastModified() mkdir() delete() list() exists() isFile() isDirectory()

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 Unit 1: Overview and Positioning
Fast Track to Java Unit 1: Overview and Positioning Sockets La comunicación entre dos procesos remotos en una red TCP/IP se realiza mediante sockets Los sockets soportan comunicación bidireccional: tanto el cliente como el servidor pueden leer y escribir Abrir un socket y enviar data es como abrir un archivo y escribir sobre él

24 Unit 1: Overview and Positioning
Fast Track to Java Unit 1: Overview and Positioning El Package java.net Contiene clases que ocultan la complejidad de: Establecer una conexión en la red Recibir y enviar datos sobre la red Provee la misma interfaz de programación que para archivos

25 Unit 1: Overview and Positioning
Fast Track to Java Unit 1: Overview and Positioning Invocando un servicio Un servidor se identifica por una dirección IP única Un servidor puede proveer diferentes servicios, cada uno de los cuales se identifica por una puerta :80

26 Modelo Cliente / Servidor
Fast Track to Java Unit 1: Overview and Positioning Modelo Cliente / Servidor El servidor: Escucha requerimientos que llegan El cliente: Inicia una conexión Entrega (escribe) y/o requiere (lee) información del servidor

27 Programando con Sockets
Servidor Cliente 1. Instancia un server socket en un puerto local 3. Instancia una conexión de tipo socket a un sistema remoto + puerto 2. Acepta conexiones en ese socket 4. Conexión establecida

28 Una Aplicación Servidora
1. Instanciar un socket servidor ServerSocket server = new ServerSocket(80); 2. Escuchar (esperar una conexión) Socket s = server.accept(); 3. Obtener input y output streams (si se requiere) BufferedReader in = new BufferedReader( new InputStreamReader(s.getInputStream())); BufferedWriter out = new BufferedWriter( new OutputStreamWriter(s.getOutputStream())); 4. Comunicación String str = in.readLine(); out.write("mensaje"); 5. Cerrar streams y sockets in.close(); out.close(); s.close(); server.close();

29 Una Aplicación Cliente
1. Instanciar un socket cliente Socket s = new Socket(" 80); 2. Obtener input y output streams (si se requiere) BufferedReader in = new BufferedReader( new InputStreamReader(s.getInputStream())); BufferedWriter out = new BufferedWriter( new OutputStreamWriter(s.getOutputStream())); 3. Comunicación String str = in.readLine(); out.write("mensaje"); 4. Cerrar streams y sockets in.close(); out.close(); s.close();

30 Aceptando Múltiples Clientes
Para aceptar múltiples clientes se debe manejar threads (de lo contrario, un cliente no podría conectarse mientras el servidor se encuentre ocupado atendiendo a otro cliente): while (true) { aceptar una conexión; crear un thread para atender al cliente; } Hoy lo común es utilizar un servidor de aplicaciones en lugar de programar código como el del ejemplo

31 Aceptando Múltiples Clientes
import java.net.*; import java.io.*; public class MultiServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(4444); boolean listening = true; while (listening) { new MultiServerThread(serverSocket.accept()).start(); } serverSocket.close();

32 Aceptando Múltiples Clientes
import java.net.*; import java.io.*; public class MultiServerThread extends Thread { private Socket s = null; public MultiServerThread(Socket socket) { this.s = socket; } public void run() { PrintWriter out = new PrintWriter(s.getOutputStream(), true); BufferedReader in = new BufferedReader( new InputStreamReader(s.getInputStream())); ...

33 Unit 1: Overview and Positioning
Fast Track to Java Unit 1: Overview and Positioning 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 El paquete java.net permite construir aplicaciones de red basadas en sockets Una vez establecida una comunicación mediante sockets, se generan streams para la comunicación entre el cliente y el servidor


Descargar ppt "Programación Orientada a Objetos"

Presentaciones similares


Anuncios Google