Title: Tema 15: Entrada/Salida
1Tema 15 Entrada/Salida
2Índice
- 1. Introducción. Flujos.
- 2. Estructura y clases del paquete java.io
3Introducción
- El paquete java.io define la Entrada/Salida en
términos de stream (o flujos). - Un flujo es una secuencia ordenada de datos que
contienen fuente/destino. - Los flujos son abstracciones que producen o
consumen información. - Relacionado con un dispositivo físico.
- Mismas clases y métodos de E/S a cualquier
dispositivo físico. - Abstrae de los detalles del Sistema Operativo.
4Clasificación de los flujos
- Hay dos tipos de flujos de caracteres y de
bytes. - Los flujos de caracteres
- Unicode (16 bits).
- Texto (caracteres legibles como código fuente ).
- Los flujos de bytes
- byte (8 bits).
- Datos binarios (imagen, ).
- No transportan adecuadamente los caracteres.
- Casi todo flujo de entrada tiene su
correspondiente de salida. - La mayoría de flujos de caracteres tiene su
equivalente de byte.
5Clases del paquete java.io
- Consta de clases generales con una clasificación
de bytes y caracteres. - Lectura/Escritura de valores primitivos y
cadenas de texto. - Clases e interfaces para interactuar con
archivos. - Serialización de objetos.
- Excepciones IOException.
6Clasificación de los flujos
- Filter Operaciones de filtrado y construcción
filtros encadenados. - Buffered No necesitan acceder al sistema de
archivos en cada invocación. - Piped Diseñados por parejas.
- ByteArray usan una matriz de bytes.
- CharArray usan una matriz de chars.
- Stringusan una cadena de caracteres.
- Print impresión en formato legible.
- LineNumberReader cuenta líneas.
- SequenceInputStream da un flujo de varios.
- Pushback envía datos de retorno.
- StreamTokenizer divide un flujo en tokens.
7Flujos de bytes
- Clases Abstractas
- InputStream
- Métodos para leer bytes.
- Es superclase de la mayoría de bytes de entrada.
- OutputStream
- Análoga a InputStream.
- Proporciona métodos para escribir en un destino.
8DataOutput
DataInput
ObjectInput
ObjectOutput
OutputStream
InputStream
ObjectInputStream
ObjectOutputStream
SequenceInputStream
ByteArrayOutputStream
ByteArrayInputStream
PipedOutputStream
PipedInputStream
FileOutputStream
FileInputStream
FilterInputStream
FilterOutputStream
DataInputStream
DataOutputStream
BufferedInputStream
BufferedOutputStream
PushbackInputStream
PrintStream
9- / Recuenta el numero de bytes de un fichero.
- Se proporciona el nombre como argumento en
- linea de comandos. Sino se proporciona fichero
se lee - de la entrada estándar (System.in) /
- package InputOutput
- import java.io.IOException
- import java.io.InputStream
- import java.io.FileInputStream
- import java.io.FileNotFoundException
- public class Ejemplo1
- public static void main(String args)
- InputStream in null
- int total 0
- try
- if(args.length 0)
- in System.in
- else
- in new FileInputStream(args0)
10Ejemplogtjava InputOutput.Ejemplo2 a
baaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbb
bfjfjfjfjfjsjsjsjajaaaaafjfjfjfjfjsjsjsjbjbbbb
bZ
- /
- Programa que copia su entrada en su salida,
- transformando un valor particular en otro.
- Con valores proporcionados desde linea de
comandos. - /
- package InputOutput
- import java.io.IOException
- public class Ejemplo2
- public static void main(String args)
- try
- byte desde (byte)args0.charAt(0)
- byte hacia (byte)args1.charAt(0)
- int b 0
- while( (b System.in.read()) ! -1)
- System.out.write( (b desde) ?
hacia b) - catch(IOException e)
- System.out.println(e)
11Flujos de caracters
- Clases abstractas Reader y Writer.
- Métodos similares a InputStream y OutputStream.
- Se diseñaron después de los flujos de bytes
- Dan soporte a las operaciones con caracteres
Unicode.
12Writer
Reader
BufferedReader
BufferedWriter
LineNumberReader
CharArrayWriter
CharArrayReader
FilterWriter
FilterReader
PushbackReader
PipedWriter
PipedReader
StringWriter
StringReader
OutputStreamWriter
InputStreamReader
FileWriter
FileReader
PrintWriter
13OutputStreamWriter y InputStreamReader
- Realizan conversión entre flujos Unicode y flujos
de bytes usando una codificación (o una por
defecto). - InputStreamReader, recibe bytes y produce
caracteres Unicode. - OutputStreamWriter, recibe caracteres y bytes.
- Por defecto, usan la codificación de la
plataforma. - FileReader y FileWriter son subclases
- Ayudan a la lectura y escritura de archivos
locales usando la codificación Unicode. - No existen ReaderInputStream ni
WriterOutputStream.
14- package InputOutput
- import java.io.IOException
- import java.io.InputStreamReader
- import java.io.FileReader
- import java.io.FileNotFoundException
- import java.io.Reader
- public class Ejemplo3
- public static void main(String args)
- Reader in null
- int cr 0
- int total 0
- int espacio 0
- try
- if( args.length 0)
- in new InputStreamReader(System.in)
- else
15Filter
- FilterInputStream FilterOutputStream FilterReader
FilterWriter. - Los flujos de entrada contienen algún otro flujo
de entrada que se usa como fuente de datos
básica, posiblemente transformando los datos o
proporcionando funcionalidades adicionales. - FilterInputStream por sí sobreescribe todos los
métodos de InputStream. - Las subclases deberían sobreescribir algunos de
estos métodos y podrían proporcionar métodos y
campos adicionales.
16ByteArray, CharArray y String
- Uso de array de bytes(char) o String como fuente
o destino de los flujos. - ByteArrayInputStream
- ByteArrayOutputStream
- CharArrayReader
- CharArrayWriter
- StringReader
- StringWriter
17Print
- PrintStream añade funcionalidades para otro flujo
de salida, para imprimir la representación de
varios valores de datos de forma apropiada. - PrintWriter imprime representaciones formateadas
de objetos para flujos de salida de texto.
18Buffered
- Almacena los datos en un bufer.
- BufferedInputStream, BufferedOutputStream,
BufferedReader y BufferedWriter. - BufferedInputStream añade funcionalidades para
otro flujo entrada, la habilidad para buferar la
entrada y para soporta mark y los métodos de
reset. - BufferedOutputStream. Esta clase implementa un
flujo de salida buferado. - BufferedReader lee texto de un flujo de
caracteres de entrada, buferando los caracteres
para proporcionar una lectura eficiente de los
caracteres, arrays y líneas. - BufferedWriter escribe texto para un flujo de
salida de caracteres, buferando los caracteres
para proporcionar una escritura eficiente de un
solo caracteres, array y cadenas.
19Piped
- PipedInputStream, PipedOutputStream, PipedReader
y PipedWriter. - PipedInputStream un flujo de entrada conducido
debería conectarse a un flujo de salida
conducido. El flujo de entrada proporciona bytes
de datos que son escritos en un flujo de salida
conducido. - PipedOutputStream es un flujo de salida conectado
a su correspondiente de entrada para crear un
conducto de comunicación. - PipedReader es un flujo de entrada de caracteres
conducidos. - PipedWriter es un flujo de caracteres de salida
conducido
20LineNumberReader
- Es un flujo de entrada de caracteres buferados
que mantiene el número de líneas. - Esta clase define los métodos void
setLineNumber(int) y int getLineNumber() para
configurar y obtener la línea actual
respectivamente. - Por defecto, la línea comienza en 0. Este número
se incrementa al leer y puede modificarse con
setLineNumber(int). - Se considera que una línea termina mediante el
carácter nueva línea ('\n'), un retorno de carro
('\r'), o un retorno de carro seguido
inmediatamente de un ('\n').
21/ Este programa imprime el número de línea
cuando se encuentra un carácter especificado
/ C\F_Telematica\Texto\Tema15gtjava
InputOutput.Ejemplo4 i .\InputOutput\Entrada.txt '
i 'en linea 2 C\F_Telematica\Texto\Tema15gt
- package InputOutput
- import java.io.IOException
- import java.io.FileReader
- import java.io.LineNumberReader
- import java.io.FileNotFoundException
- public class Ejemplo4
- public static void main(String args)
- if( args.length ! 2)
- throw new IllegalArgumentException("So
n necesarios dos argumentos") -
- try
- int igual args0.charAt(0)
- FileReader archivoEn new FileReader
(args1) - LineNumberReader in new
LineNumberReader(archivoEn) - int cr
- boolean seguir true
22Pushback
- Permite enviar de vuelta caracteres después de
leerlos. - Métodos
- void unread(char cbuf)
- void unread(char cbuf, int off, int len)
- void unread(int c)
23/busca la secuencia de caracteres iguales más
largos/gtjava InputOutput.Ejemplo5
Entrada.txt43 veces de f
- package InputOutput
- import java.io.IOException
- import java.io.FileInputStream
- import java.io.PushbackInputStream
- import java.io.FileNotFoundException
- public class Ejemplo5
- public static void main(String args)
- int max 0 /Secuencia más larga
encontrada/ - int b /byte actual de la
secuencia/ - int cnt, b1, maxB -1
- FileInputStream input null
- PushbackInputStream in null
- try
- input new FileInputStream(args0)
- in new PushbackInputStream(
input ) - do
24DataInput y DataOutput
- Los flujos Data soportan entrada/salida binaria
de los tipos de datos primitivos (boolean, char,
byte, short, int, long, float, y double) así como
para los String. - Todos estos flujos implementan las interfaces
DataInput o DataOutput, para la entrada y salida
respectivamente.
25Ejemplo
- Primero, el programa define algunos valores
- static final String dataFile "invoicedata"
- static final double prices 19.99, 9.99,
15.99, 3.99, 4.99 - static final int units 12, 8, 13, 29, 50
- static final String descs "Java T-shirt",
- "Java Mug",
- "Duke Juggling Dolls",
- "Java Pin",
- "Java Key Chain"
- Luego se abre un flujo de salida. Ya que un
DataOutputStream puede sólo crearse como una
envolvente para un flujo existente. - out new DataOutputStream(new
- BufferedOutputStream(new
FileOutputStream(dataFile))) - Se escribe en el flujo de salida.
- for (int i 0 i lt prices.length i )
- out.writeDouble(pricesi)
- out.writeInt(unitsi)
- out.writeUTF(descsi)
26File
- FileInputStream, FileOutputStream, FileReader y
FileWriter. - FileInputStream obtiene bytes de entrada de un
fichero en un sistema de ficheros. - FileOutputStream, es un flujo de salida para
escribir datos a un File o a un FileDescriptor. - FileReader, clase para leer ficheros de
caracteres. - FileWriter, clase para escribir ficheros de
caracteres.
27RandomAccessFile
- Son archivos de acceso aleatorio.
- Se comporta como un gran array de bytes
almacenados en el sistema de archivos. - Con un puntero de archivo.
- Leen bytes desde donde indican el punterio y lo
dejan donde acaba - Pueden ser de lectura y escritura.
- No es subclase de InputStream, OutputStream,
Reader y Writer.
28Serialización
- Transforma un objeto en un flujo de datos, con la
posibilidad de reconstruirlo posteriormente el
objeto. - Uso transferencia en la red, guardar en una Base
de Datos - Clases e interfaces asociadas
- Serializable
- ObjectOutputStream
- ObjectInputStream
- ObjectOutput
- ObjectInput
- Externalizable