Download Entrada/Salida entre

Document related concepts
no text concepts found
Transcript
ENTRADA/SALIDA
ENTRADA/SALIDA DESDE O HACIA UN
PROCESO
ENTRADA/SALIDA ENTRE PROCESOS
Informática III-2007
Ing. Estela D'Agostino
1
ENTRADA /SALIDA
•Para obtener información:
stream
FUENTE
información
leer
PROGRAMA
FUENTE: archivo, dispositivo entrada, socket.
Informática III-2007
Ing. Estela D'Agostino
2
ENTRADA /SALIDA
•Para escribir información:
stream
PROGRAMA
escribe
información
DESTINO
DESTINO: archivo, dispositivo salida, socket.
Informática III-2007
Ing. Estela D'Agostino
3
ENTRADA /SALIDA
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).
Informática III-2007
Ing. Estela D'Agostino
4
ENTRADA /SALIDA
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)
Informática III-2007
Ing. Estela D'Agostino
5
ENTRADA /SALIDA
Leer




abrir un stream
mientras haya información
leer información
cerrar el stream
Escribir




abrir el stream
mientras haya información
escribir información
cerrar el stream
Informática III-2007
Ing. Estela D'Agostino
6
ENTRADA /SALIDA (INF. II)
Java tiene acceso a la entrada/ salida
estándar a través de
la clase java. lang. System
Los flujos estándar son campos estáticos de
System
.System. in implementa la entrada estándar
.System. out implementa la salida estándar
.System. err implementa la salida de error
Informática III-2007
Ing. Estela D'Agostino
7
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
8
Flujos de bytes
Informática III-2007
Ing. Estela D'Agostino
9
Flujos de caracteres
Informática III-2007
Ing. Estela D'Agostino
10
Combinación de flujos
Los flujos se pueden combinar para
obtener la funcionalidad deseada
Informática III-2007
Ing. Estela D'Agostino
11
Tipo de acceso
Acceso
Secuencial
 Directo o aleatorio - ( RandomAccessFile

)
Informática III-2007
Ing. Estela D'Agostino
12
Flujos principales
InputStreamReader

Lee bytes de un flujo InputStream y los
convierte en caracteres Unicode
Métodos de utilidad
read () lee un único caracter
 ready() indica cuando está listo el flujo para
lectura
Informática III-2007
Ing. Estela D'Agostino
13
Flujos principales
 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();
Informática III-2007
Ing. Estela D'Agostino
14
Entrada/Salida desde archivos
dentro de un mismo proceso
Informática III-2007
Ing. Estela D'Agostino
15
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
16
Archivos de texto
FileWriter
 Util para escribir archivos de texto
Constructores
 FileWriter( String nombrearchivo) -- reescribe
 FileWriter( String nombrearchivo, boolean
añadirFinal) -- añade
Informática III-2007
Ing. Estela D'Agostino
17
Archivos
Clase File
Constructores



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
18
Métodos
canRead() comprueba si el archivo se puede leer
canWrite() comprueba siel archivo se puede
escribir
delete() borra dicho archivo
getPath() devuelve la ruta del archivo
mkdir() crea un directorio con la ruta del objeto
que lo recibe
isDirectory() comprueba si dicho archivo es un
directorio
Informática III-2007
Ing. Estela D'Agostino
19
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
20
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
21
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
22
Interfaz de serialización
 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 IOException
private void readObject (java. io. ObjectInputStream
entrada)
throws IOException, ClassNotFoundException;
Informática III-2007
Ing. Estela D'Agostino
23
Entrada/Salida entre procesos
Informática III-2007
Ing. Estela D'Agostino
24
Comunicación Entre Procesos
Comunicación
entre procesos
Maquinas en
red
Cliente Servidor
Informática III-2007
Ing. Estela D'Agostino
25
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
26
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
27
Cliente - Servidor
Proceso
Servidor
Conexión
Sockets
Informática III-2007
Ing. Estela D'Agostino
Proceso
Cliente
28
Cliente - Servidor
Proceso
Cliente
red
Proceso
Servidor
Proceso Cliente
Proceso Cliente
Proceso
Servidor
Proceso Cliente
Proceso Cliente
Informática III-2007
Ing. Estela D'Agostino
29
Comunicación Entre Procesos
 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
Informática III-2007
Ing. Estela D'Agostino
30
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
31
Comunicación Entre Procesos
Paquete java.net
Java ofrece comunicaciones basadas en
sockets que permiten a las aplicaciones
manejar el trabajo en redes como si
fueran E/S de archivos.
Informática III-2007
Ing. Estela D'Agostino
32
Comunicación Entre Procesos
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.
Informática III-2007
Ing. Estela D'Agostino
33
Comunicación Entre Procesos
Sockets
conexión.

de
flujo:
orientado
a
la
Protocolo TCP
Sockets de datagrama: no orientado a
la conexión.

Protocolo UDP
Informática III-2007
Ing. Estela D'Agostino
34
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
35
Cliente - Servidor
Servidor
El 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
Informática III-2007
Ing. Estela D'Agostino
36
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
37
Cliente - Servidor
Servidor
El servidor se ejecuta y publica en que
número de puerto ofrece el servicio.
Espera por petición de algún cliente.
Informática III-2007
Ing. Estela D'Agostino
38
Cliente - Servidor
Cliente
Conoce 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.
Informática III-2007
Ing. Estela D'Agostino
39
Cliente - Servidor
Informática III-2007
Ing. Estela D'Agostino
40
Cliente - Servidor
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.
Informática III-2007
Ing. Estela D'Agostino
41
Servidor
Abrir canal de comunicación
ServerSocket ref
Cliente
Abrir canal de comunicación
Socket ref
Publicar la direcc. del canal
ref = new (Puerto)
Espera recibir solicitudes
While, for o do
Esperar peticiones
ref.accept()
Conectar con servidor
ref=new(host,port)
Crear proceso hijo
hijo = ref.accept()
Envio y recepción de datos
hijo read() | write()
Cerrar canal de comunicación
ref.close()
Envio y recepción de datos
hijo read() | write()
Cerrar canal de comunicación
ref.close()
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
43
Consideraciones
4. Se establece la conexión entre el
socket del cliente y el del servidor y
pueden intercambiar datos.
Informática III-2007
Ing. Estela D'Agostino
44
El paquete java.net
Proporciona una interfaz orientada a
objetos para trabajar con sockets
Informática III-2007
Ing. Estela D'Agostino
45
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
46
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
47
Java.net.Socket
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 ( )
Informática III-2007
Ing. Estela D'Agostino
48
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
49
Implementación servidor
Socket miServicio;
try { miServicio = new ServerSocket(
numeroPuerto );
} catch( IOException e )
{ System.out.println( e ); }
Informática III-2007
Ing. Estela D'Agostino
50
Implementación servidor
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 ); }
Informática III-2007
Ing. Estela D'Agostino
51
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
52
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
53
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
54
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
55
Paquete java.nio
Agrega nuevas funcionalidades:


Buffers
Channels
Informática III-2007
Ing. Estela D'Agostino
56
Conexión disco-SO-aplicación
user space
buffer
Proceso
Informática III-2007
kernel space
read()
hardware
DMA
Controlador
disco
buffer
Ing. Estela D'Agostino
Disco
57
Paquete java.nio
Cambia el enfoque de trabajo
Java.io
Java.nio
Informática III-2007
bytes
caracteres
bloques
Ing. Estela D'Agostino
más lento
menos elegante.
más rápido.
similar a como lo
hace el SO.
58
Paquete java.nio
JDK 1.4. java.io.*
java.nio. * se integraron bien.
Informática III-2007
Ing. Estela D'Agostino
59
Paquete java.nio
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
Informática III-2007
Ing. Estela D'Agostino
60
Buffer
Posició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
61
Buffer
Posición
Posición
Informática III-2007
Ing. Estela D'Agostino
62
Paquete java.nio
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.
Informática III-2007
Ing. Estela D'Agostino
63
Paquete java.nio
Stream
Canal
Informática III-2007
trabaja
trabaja
Ing. Estela D'Agostino
bytes
buffer
64
Paquete java.nio
El paquete java.io y java.net para la
version java 1.4 cambia un poco para
poder trabajar con canales.
Informática III-2007
Ing. Estela D'Agostino
65