informática iii-2007ing. estela d'agostino1 entrada/salida entrada/salida desde o hacia un...
TRANSCRIPT
Informática III-2007
Ing. Estela D'Agostino 1
ENTRADA/SALIDA
ENTRADA/SALIDA DESDE O HACIA UN PROCESO
ENTRADA/SALIDA ENTRE PROCESOS
Informática III-2007
Ing. Estela D'Agostino 2
ENTRADA /SALIDA
FUENTE PROGRAMA
stream
leer
•Para obtener información:
FUENTE: archivo, dispositivo entrada, socket.
información
Informática III-2007
Ing. Estela D'Agostino 3
ENTRADA /SALIDA
DESTINOPROGRAMA
stream
escribe
•Para escribir información:
DESTINO: archivo, dispositivo salida, socket.
información
Informática III-2007
Ing. Estela D'Agostino 4
Entrada/Salida básica: desde un dispositivo de entrada o hacia un dispositivo de salida (teclado / monitor).
Entrada/Salida desde archivos dentro de un mismo proceso
Entrada/salida entre procesos (utilizando sockets).
ENTRADA /SALIDA
Informática III-2007
Ing. Estela D'Agostino 5
Antes de la version java 1.4
Los programas se comunican con flujos y estos flujos actúan como interfaz con el dispositivo o clase asociada Operación independiente del tipo de datos y del
dispositivo Mayor flexibilidad (p. e. redirección,
combinación)
ENTRADA /SALIDA
Informática III-2007
Ing. Estela D'Agostino 6
Leer abrir un stream mientras haya información leer información cerrar el streamEscribir abrir el stream mientras haya información escribir información cerrar el stream
ENTRADA /SALIDA
Informática III-2007
Ing. Estela D'Agostino 7
Java tiene acceso a la entrada/ salida estándar a través dela clase java. lang. System
Los flujos estándar son campos estáticos de SystemSystem. in implementa la entrada estándarSystem. out implementa la salida estándarSystem. err implementa la salida de error
ENTRADA /SALIDA (INF. II)
Informática III-2007
Ing. Estela D'Agostino 8
Clasificación de flujos
Representación de la información Flujos de bytes Flujos de caracteres
Propósito Entrada - ( InputStream, Reader ) Salida - ( OutputStream, Writer ) Entrada/ Salida - ( RandomAccessFile )
Informática III-2007
Ing. Estela D'Agostino 9
Flujos de bytes
Informática III-2007
Ing. Estela D'Agostino 10
Flujos de caracteres
Informática III-2007
Ing. Estela D'Agostino 11
Combinación de flujos
•Los flujos se pueden combinar para obtener la funcionalidad deseada
Informática III-2007
Ing. Estela D'Agostino 12
Tipo de acceso
Acceso Secuencial Directo o aleatorio -
( RandomAccessFile )
Informática III-2007
Ing. Estela D'Agostino 13
Flujos principales
InputStreamReader Lee bytes de un flujo InputStream y los
convierte en caracteres Unicode
Métodos de utilidadread () lee un único caracter ready() indica cuando está listo el flujo para
lectura
Informática III-2007
Ing. Estela D'Agostino 14
BufferedReader Entrada mediante búfer, mejora el rendimiento
Método de utilidad readLine() lectura de una línea como cadena
InputStreamReader isr = new InputStreamReader( System. in);
BufferedReader Teclado = new BufferedReader (isr);String cadena = Teclado. readLine();
Flujos principales
Informática III-2007
Ing. Estela D'Agostino 15
Entrada/Salida desde archivos dentro de un mismo proceso
Informática III-2007
Ing. Estela D'Agostino 16
Archivos de texto
FileReader Util para leer archivos de texto
Constructor: FileReader( String nombreArchivo)
PrintWriter Implementa un flujo de salida de caracteres
Métodos de utilidad
print(), println(), close()
Informática III-2007
Ing. Estela D'Agostino 17
FileWriter Util para escribir archivos de texto
Constructores FileWriter( String nombrearchivo) -- reescribe FileWriter( String nombrearchivo, boolean
añadirFinal) -- añade
Archivos de texto
Informática III-2007
Ing. Estela D'Agostino 18
Archivos
Clase FileConstructores File( String ruta) File( String ruta, String nombre) File( File directorio, String nombre)
Constructores de otras clases FileReader( File archivo) FileWriter( File archivo)
Informática III-2007
Ing. Estela D'Agostino 19
Métodos
canRead() comprueba si el archivo se puede leercanWrite() comprueba siel archivo se puede escribirdelete() borra dicho archivogetPath() devuelve la ruta del archivomkdir() crea un directorio con la ruta del objeto que lo recibeisDirectory() comprueba si dicho archivo es un directorio
Informática III-2007
Ing. Estela D'Agostino 20
Flujos
Clase ObjectOuputStream Método - writeObject() Ejemplo: flujoSalida. writeObjetct
(objetoClase);
Clase ObjectInputStream Método - readObject() Ejemplo: objetoClase = (Clase) flujoEntrada.
readObject();
Informática III-2007
Ing. Estela D'Agostino 21
Serialización de objetos
Serializar es almacenar objetos de forma permanente (p. e. en un archivo o en un flujo de comunicación) No es necesario realizar conversiones Útil para portabilidad y para compartir objetos
entre aplicaciones
Informática III-2007
Ing. Estela D'Agostino 22
Interfaz de serialización
Cualquier clase que desee poder serializar sus objetos debe implementar el interfaz Serializable
En esta implementación el objeto define como debe almacenarse o recuperarse de un archivo
Si se trata de serializar un objeto que no lo implementa se obtiene la excepción NotSerializableException
No se serializan los miembros static
Informática III-2007
Ing. Estela D'Agostino 23
•Las clases que necesiten algún tratamiento especial en la serialización deben implementar estos dos métodos
private void writeObject (java. io. ObjectOutputStream salida)
throws IOExceptionprivate void readObject (java. io. ObjectInputStream
entrada)throws IOException, ClassNotFoundException;
Interfaz de serialización
Informática III-2007
Ing. Estela D'Agostino 24
Entrada/Salida entre procesos
Informática III-2007
Ing. Estela D'Agostino 25
Comunicación Entre Procesos
Comunicación entre procesos
Maquinas en red
Cliente - Servidor
Informática III-2007
Ing. Estela D'Agostino 26
Protocolo
Si se quiere establecer una comunicación entre dos máquinas se debe trabajar con protocolos.Un protocolo especifica como deben comunicarse dos componentes de red. En general se trabaja con una familia de protocolos que trabajan en forma conjunta para enviar datos de una máquina a otra.Protocolo TCP/IP.
Informática III-2007
Ing. Estela D'Agostino 27
Cliente - Servidor
Cuando una aplicación informática, definida como un conjunto de datos y programas, tiene a estos repartidos entre dos o mas ordenadores, se dice que la arquitectura es cliente servidor.
Informática III-2007
Ing. Estela D'Agostino 28
Cliente - Servidor
Proceso Servidor
Proceso Cliente
Conexión
Sockets
Informática III-2007
Ing. Estela D'Agostino 29
Cliente - Servidor
Proceso Servidor
Proceso Cliente
red
Proceso Servidor
Proceso Cliente
Proceso Cliente
Proceso Cliente
Proceso Cliente
Informática III-2007
Ing. Estela D'Agostino 30
Los sockets son un sistema de comunicación entre procesos de diferentes máquinas de una red. Más exactamente, un socket es un punto de comunicación por el cual un proceso puede emitir o recibir información.
Es una abstracción de software para imaginarse la conexión entre dos máquinas
Comunicación Entre Procesos
Informática III-2007
Ing. Estela D'Agostino 31
Aplicaciones cliente/servidor
El programa servidor permanece escuchando a los clientes.El programa cliente solicita servicios al servidor.
Informática III-2007
Ing. Estela D'Agostino 32
Paquete java.netJava ofrece comunicaciones
basadas en sockets que permiten a las aplicaciones manejar el trabajo en redes como si fueran E/S de archivos.
Comunicación Entre Procesos
Informática III-2007
Ing. Estela D'Agostino 33
Sockets activos: pueden enviar y recibir datos a través de una conexión abierta
Sockets pasivos: esperan intentos de conexión. Cuando llega una conexión entrante le asignan un socket activo y sigue esperando por otro intento. No sirven para enviar o recibir datos.
Comunicación Entre Procesos
Informática III-2007
Ing. Estela D'Agostino 34
Sockets de flujo: orientado a la conexión. Protocolo TCP
Sockets de datagrama: no orientado a la conexión. Protocolo UDP
Comunicación Entre Procesos
Informática III-2007
Ing. Estela D'Agostino 35
Sockets De Flujo
Un proceso establece una conexión con otro proceso.
Mientras la conexión existe , los datos fluyen en un flujo continuo.
Protocolo empleado TCP.
Informática III-2007
Ing. Estela D'Agostino 36
ServidorEl servidor corre en una máquina
especifica, tiene un socket enlazado a un número de puerto
Escucha el socket del cliente esperando que éste realice una petición
Cliente - Servidor
Informática III-2007
Ing. Estela D'Agostino 37
Puerto
Un puerto es una dirección de 16 bits, asociada comúnmente a una aplicación.Un ordenador dispone de 65536 puertos. Los primeros 1024 se reservan para servicios estándares y para procesos del sistema operativo.
Informática III-2007
Ing. Estela D'Agostino 38
ServidorEl servidor se ejecuta y publica en que
número de puerto ofrece el servicio.Espera por petición de algún cliente.
Cliente - Servidor
Informática III-2007
Ing. Estela D'Agostino 39
ClienteConoce el nombre de la máquina
sobre la cual corre el servidor y el número de puerto.
Cliente solicita la conexión.Se establece la conexión.
Cliente - Servidor
Informática III-2007
Ing. Estela D'Agostino 40
Cliente - Servidor
Informática III-2007
Ing. Estela D'Agostino 41
Al establecer la comunicación el servidor determina un nuevo puerto para esa conexión y sigue escuchando por el puerto primitivo para atender otros clientes.
Cliente - Servidor
ServidorAbrir canal de comunicación
ServerSocket refPublicar la direcc. del canal
ref = new (Puerto)
Espera recibir solicitudesWhile, for o do
Esperar peticionesref.accept()
Crear proceso hijohijo = ref.accept()
Envio y recepción de datoshijo read() | write()
Cerrar canal de comunicación
ref.close()
Abrir canal de comunicación
Socket ref
Conectar con servidor ref=new(host,port)
Envio y recepción de datoshijo read() | write()
Cerrar canal de comunicación
ref.close()
Cliente
Informática III-2007
Ing. Estela D'Agostino 43
Consideraciones
1. El servidor debe estar en ejecucion antes de que los clientes intenten conectarse.
2. El cliente debe crear un socket en el cual se especifique la direccion IP y el número de puerto de la aplicación que le brinda el servicio deseado.
3. El servidor creara un socket para el cliente, durante su tiempo de vida no se puede asignar a otros clientes.
Informática III-2007
Ing. Estela D'Agostino 44
4. Se establece la conexión entre el socket del cliente y el del servidor y pueden intercambiar datos.
Consideraciones
Informática III-2007
Ing. Estela D'Agostino 45
El paquete java.net
Proporciona una interfaz orientada a objetos para trabajar con sockets
Informática III-2007
Ing. Estela D'Agostino 46
Java.net.ServerSocket
La utiliza el servidor para recibir peticiones de los clientes.Esta clase tiene un método accept( ).La llamada a este método hace que la aplicación se bloquee esperando una petición de un cliente.Cuando esto suceda la clase ServerSocket creara un Socket y lo usara para comunicarse con el cliente. Un servidor puede tener una única instancia de ServerSocket relacionadas con varias instancias de Sockets.
Informática III-2007
Ing. Estela D'Agostino 47
Java.net.ServerSocket public ServerSocket (int puerto) throws IOException
public ServerSocket (int puerto, int longitudCola) throws IOException
public ServerSocket (int puerto, int longitudCola, InetAdress dirInternet) throws IOException
public Socket accept( ) throws IOException
public InetAddress getInetAddress ( )
public int getLocalPort ( )
public void close ( ) throws IOException
Informática III-2007
Ing. Estela D'Agostino 48
Implementa sockets activos. Pueden recibir y enviar información.
public Socket (String host, int puerto)public Socket (InetAddress direccion, int
puerto)public InetAdress getInetAdress ( )public InputStream getInputStream ( )public OutputputStream getOutputStream ( )public void close ( )
Java.net.Socket
Informática III-2007
Ing. Estela D'Agostino 49
Implementación cliente
Socket miCliente; try { miCliente = new Socket(
"maquina",numeroPuerto ); } catch( IOException e ) { System.out.println( e ); }
Informática III-2007
Ing. Estela D'Agostino 50
Socket miServicio; try { miServicio = new
ServerSocket( numeroPuerto ); } catch( IOException e ) { System.out.println( e ); }
Implementación servidor
Informática III-2007
Ing. Estela D'Agostino 51
Debe crear un socket que atienda las peticiones de los clientes
Socket socketServicio = null; try { socketServicio =
miServicio.accept(); } catch( IOException e ) { System.out.println( e ); }
Implementación servidor
Informática III-2007
Ing. Estela D'Agostino 52
Cerrar comunicación
Debo cerrar la comunicación del lado del cliente
try { salida.close(); entrada.close(); miCliente.close(); } catch( IOException e ) { System.out.println( e ); }
Informática III-2007
Ing. Estela D'Agostino 53
Cerrar comunicación
Debo cerrar la comunicación del lado del servidor
try { salida.close(); entrada.close(); socketServicio.close(); miServicio.close(); } catch( IOException e ) { System.out.println( e ); }
Informática III-2007
Ing. Estela D'Agostino 54
Problemas con operaciones de I/O
Las operaciones de I/O son mucho mas lentas, que las operaciones que se resuelven en la CPU.
Java.nio.*
Informática III-2007
Ing. Estela D'Agostino 55
Paquete java.nio
Permite la transferencia de datos en forma eficaz. Transfiere bloques de datos.Los sockets de nio trabajan sin bloqueo. No necesito un hilo por cada cliente.Java.io se sigue necesitando para el tratamiento de datos.Java.nio se utiliza para aplicaciones intensivas en I/O.
Informática III-2007
Ing. Estela D'Agostino 56
Paquete java.nio
Agrega nuevas funcionalidades: Buffers Channels
Informática III-2007
Ing. Estela D'Agostino 57
Conexión disco-SO-aplicación
Controlador disco
Disco
hardware
Proceso
buffer
buffer
DMAread()
user space
kernel space
Informática III-2007
Ing. Estela D'Agostino 58
Paquete java.nio
Cambia el enfoque de trabajo
Java.iobytes
más lento
Java.nio bloques menos elegante.más rápido.similar a como lo hace el SO.
caracteres
Informática III-2007
Ing. Estela D'Agostino 59
JDK 1.4. java.io.*
java.nio. * se integraron bien.
Paquete java.nio
Informática III-2007
Ing. Estela D'Agostino 60
Buffer : es un contenedor (clase abstracta) para una cantidad fija de datos. Es un arreglo de tipos de datos primitivos, envuelto por un objeto. ByteBuffer CharBuffer ShortBuffer IntBuffer LongBuffer FloatBuffer DoubleBuffer
Paquete java.nio
Informática III-2007
Ing. Estela D'Agostino 61
BufferPosición: es el índice del próximo elemento que será leído o escrito. Se actualiza automaticamente por métodos set o get.
Límite: Primer elemento del buffer que no debería ser escrito o leído. Es la cantidad de elementos que viven en el buffer en un momento dado.
Capacidad: máximo número de elementos que puede tener, se le da valor al crearlo y no se puede cambiar.
Mark: una posición marcada. Está indefinida hasta que toma un valor.0 <= mark <= position <= limit <= capacity
Informática III-2007
Ing. Estela D'Agostino 62
Buffer
Posición
Posición
Informática III-2007
Ing. Estela D'Agostino 63
Canales : representan una conexión abierta a una entidad, como ser dispositivo de hard, disco, socket. Pueden operar con bloqueo o sin él.Son bidireccionales.Es una conexión entre un buffer y una fuente o un destino.
Paquete java.nio
Informática III-2007
Ing. Estela D'Agostino 64
Paquete java.nio
Streamtrabaja
bytes
Canaltrabaja
buffer
Informática III-2007
Ing. Estela D'Agostino 65
El paquete java.io y java.net para la version java 1.4 cambia un poco para poder trabajar con canales.
Paquete java.nio