150 likes | 272 Views
Entrada / Salida. Java adopta de Unix el concepto de stream Un stream es un flujo de datos (secuencia de bytes) que va de una fuente a un destino . Desde el punto de vista del proceso que maneja el stream, éstos se dividen en:
E N D
Java adopta de Unix el concepto de stream • Un stream es un flujo de datos (secuencia de bytes) que va de una fuente a un destino. • Desde el punto de vista del proceso que maneja el stream, éstos se dividen en: • streams de entrada (o de lectura): son aquellos en los que podemos leer datos y nuestro proceso es el destino. • streams de salida (o de escritura): son aquellos en los que podemos escribir datos y nuestro proceso actúa como fuente. • Un lenguaje de programación debe permitir hacer operaciones de E/S sobre un conjunto muy diverso de dispositivos (fichero, consola, conexiones de red...) • Además, en muchos casos, la E/S debe poder realizarse de modos muy distintos (secuencial, aleatorio, caracter a caracter, por palabras, por líneas, binario...) • Java trata de modo muy similar los distintos tipos de streams.
Flujos de entrada • Binarios (leen bytes) • Simples: leen los bytes en su formato original • Compuestos (filtros): permiten leer los datos siguiendo algún formato (por líneas, transformándolos en números, ...) • De caracteres o Readers (leen caracteres unicode) • Simples • Compuestos (filtros)
Jerarquía de los flujos de entrada binarios • InputStream • AudioInputStream • ByteArrayInputStream • FileInputStream • FilterInputStream • ObjectInputStream • PipedInputStream • SequenceInputStream • StringBufferInputStream BufferedInputStream DataInputStream LineNumberInputStream PushBackInputStream ...
Jerarquía de los flujos de entrada de caracteres (Readers) • Reader • BufferedReader • CharArrayReader • FilterReader • PushBackReader • InputStreamReader • FileReader • PipedReader • StringReader
Lectura de fichero (I) FileInputStream InputStreamReader BufferedReader int read () lee 1 byte String readLine () lee 1 línea int read () lee 1 caracter Fichero try { FileInputStream fin = new FileInputStream(“fichero.txt"); InputStreamReader isr = new InputStreamReader(fin); BufferedReader miEntrada = new BufferedReader(isr); String linea = miEntrada.readLine(); while( linea != null ) { System.out.println(linea); linea = miEntrada.readLine(); } } catch (IOException e){ System.out.println(e); }
Lectura de fichero (II) FileReader BufferedReader String readLine () lee 1 línea int read () lee 1 caracter Fichero try { FileReader fr = new FileReader (“fichero.txt"); BufferedReader miEntrada = new BufferedReader(fr); String linea = miEntrada.readLine(); while( linea != null ) { System.out.println(linea); linea = miEntrada.readLine(); } } catch (IOException e){ System.out.println(e); }
Lectura de consola (entrada estándar) InputStream (System.in) InputStreamReader BufferedReader String readLine () lee 1 línea int read () lee 1 caracter void read (byte [ ]) lee n bytes Entrada estándar (teclado) String s; int numero; InputStreamReader isr = new InputStreamReader(System.in); BufferedReader stdin = new BufferedReader(isr); try { s = stdin.readLine(); numero = Integer.parseInt( s ); } catch ( IOException e ) { System.out.println(e); } catch (NumberFormatException e){ System.out.println(e); }
Flujos de salida • Binarios (escriben bytes) • Simples: escriben los bytes en su formato original • Compuestos (filtros): permiten añadir un formato a los datos. • De caracteres o Writers (escriben caracteres unicode) • Simples • Compuestos (filtros)
Jerarquía de los flujos de salida binarios • OutputStream • ByteArrayOutputStream • FileOutputStream • FilterOutputStream • ObjectOutputStream • PipedOutputStream BufferedOutputStream DataOutputStream PrintStream ...
Jerarquía de los flujos de salida de caracteres (Writers) • Writer • BufferedWriter • CharArrayWriter • FilterWriter • PushBackWriter • OutputStreamWriter • FileWriter • PipedWriter • StringWriter
Escritura a fichero (I) FileOutputStream PrintStream void write (int b) escribe 1 byte print(...), println(...) escribe String, int, float, boolean... Fichero try { FileOutputStream fout = new FileOutputStream("test.out"); PrintStream miSalida = new PrintStream(fout); miSalida.println("texto"); miSalida.close(); fout.close(); } catch (IOException e) { System.out.println("Error: " + e); }
Escritura a fichero (II) FileWriter void write (int c) escribe 1 caracter Fichero String s = "Texto a escribir"; try { FileWriter fw = new FileWriter("test.out"); for( int i = 0; i < s.length(); i++ ) fw.write(s.charAt(i)); fw.close(); } catch (IOException e) { System.out.println("Error: " + e); }
Escritura a consola (salida estándar) PrintStream (System.out) Salida estándar (consola) • System.out es un stream estático de tipo PrintStream, asociado con la salida estándar (normalmente la consola). • No es necesario abrirlo ni cerrarlo. • Implementa, entre otros, los métodos print y println. Dichos métodos están sobrecargados para aceptar parámetros de tipo String, char, int, long, float, double, boolean y Object.