Informatico
Programación Orientada a Objetos
Facultad de Informática
Juan Pavón Mestras
Dep. Ingeniería del Software e Inteligencia Artificial
Universidad Complutense Madrid
E/S con flujos (streams)
En Java se define la abstracción de stream (flujo) para tratar la
comunicación de información entre el programa y el exterior
Entre una fuente y un destino fluye unasecuencia de datos
Los 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)
Diversidad de dispositivos (fichero, pantalla, teclado, red, …)
Diversidad de formas de comunicación
• Modo de acceso: secuencial, aleatorio
• Información intercambiada: binaria, caracteres, líneasflujo (stream)
Fuente
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
...
dato
dato
Entrada/Salida con Java
Destino
2
Flujos estándar
Como en Unix:
Entrada estándar - habitualmente el teclado
Salida estándar - habitualmente la consola
Salida de error - habitualmente la consola
En Java se accede a la E/S estándar a través de campos
estáticos de la clasejava.lang.System
System.in implementa la entrada estándar
System.out implementa la salida estándar
System.err implementa la salida de error
Dispositivo
de entrada
Flujo entrada
(System.in)
Datos
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Flujo salida
Programa
Datos
Dispositivo
de salida
(System.out)
Entrada/Salida con Java
3
Flujos estándarSystem.in
Instancia de la clase InputStream: flujo de bytes de entrada
Metodos
• read() permite leer un byte de la entrada como entero
• skip(n ) ignora n bytes de la entrada
• available() número de bytes disponibles para leer en la entrada
System.out
Instancia de la clase PrintStream: flujo de bytes de salida
Metodos para impresión de datos
• print(), println()
• flush() vacía elbuffer de salida escribiendo su contenido
System.err
Funcionamiento similar a System.out
Se utiliza para enviar mensajes de error (por ejemplo a un
fichero de log o a la consola)
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Entrada/Salida con Java
4
Ejemplo - uso flujos estándar
import java.io.*;
class LecturaDeLinea {
public static void main( String args[] ) throwsIOException {
int c;
int contador = 0;
// se lee hasta encontrar el fin de línea
while( (c = System.in.read() ) != '\n' )
{
contador++;
System.out.print( (char) c );
}
System.out.println(); // Se escribe el fin de línea
System.err.println( "Contados "+ contador +" bytes en total." );
}
}
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Entrada/Salida con Java
5Utilización de los flujos
Los flujos se implementan en las clases del paquete
java.io
Esencialmente todos funcionan igual, independientemente
de la fuente de datos
Clases java.io.Reader y java.io.Writer
int read()
int read(char buffer[])
int read(char buffer[], int offset, int length)
int write(int aCharacter)
int write(char buffer[])
int write(char buffer[], int offset, int length)Juan Pavón Mestras
Facultad de Informática UCM, 2007-08
Entrada/Salida con Java
6
Utilización de los flujos
Lectura
1.
Abrir un flujo a una fuente de datos (creación del objeto stream)
•
•
•
Teclado
Fichero
Socket remoto
•
Leer datos
2.
Mientras existan datos disponibles
3.
Cerrar el flujo (método close)
Escritura
1.
Abrir un flujo a una fuente dedatos (creación del objeto stream)
•
•
•
Pantalla
Fichero
Socket local
•
Escribir datos
2.
Mientras existan datos disponibles
3.
Cerrar el flujo (método close)
Nota: para los flujos estándar ya se encarga el sistema de
abrirlos y cerrarlos
Un fallo en cualquier punto produce la excepción IOException
Juan Pavón Mestras
Facultad de Informática UCM, 2007-08...
Regístrate para leer el documento completo.