Expo Io Streams

35
I/O-STREAMS Mónica Muro Velázqu Enrique Navarrete Pér Stephanie Torres Ju

description

io streams java

Transcript of Expo Io Streams

Presentacin de PowerPoint

I/O-STREAMSMnica Muro VelzquezEnrique Navarrete PrezStephanie Torres Juan

Java considera a cada archivo como un flujo secuencial de bytes La E/S de Java se realiza a travs de flujos (Streams). Secuencia ordenada de bytes Estos pueden ser de entrada (InputStream) o de salida (OutputStream), ya sea como caracteres o bytes. Independizan a los objetos de origen/destino de los datos. Las clases de E/S se encuentran en el paquete java.io. Los mtodos de OutputStream (y tambin de InputStream) lanzan la excepcin IOException ante cualquier fallo relacionado con el intento de escritura o lectura

introduccinOPERACIONES ENTRADA/SALIDAJava contiene clases que permiten al programador realizar operaciones de entrada y salida con objetos o variables de tipos de datos primitivos. Para realizar dichas operaciones de entrada y salida, pueden usarse objetos de las clases ObjectInputStream, y ObjectOutputStream junto con las clases de flujos de archivos basadas en bytes FileInputStream y FileOutputStream

FLUJOSFLUJOS BASADOS EN BYTES: Los flujos que reciben y envan bytes a archivos se conocen como flujos basados en bytes, y almacenan datos en su formato binario.Utilizan archivos binariosFLUJOS BASADOS EN CARACTERES: Los flujos que reciben y envan caracteres de/a los archivos se conocen como flujos basados en caracteres, y almacenan datos como una secuencia de caracteres.Utilizan archivos de texto

Un programa de Java abre un archivo creando un objeto y le asocia un flujo de bytes o de caracteresCLASE SYSTEMLa clase System proporciona los mtodos setIn, setOut y setErr para redirigir los flujos estndar de entrada, salida y error, respectivamente.Java crea tres objetos cuando un programa de Java empieza a ejecutarse: System.in: El objeto System.in (el objeto flujo de entrada estndar) generalmente permite a un programa recibir bytes desde el tecladoSystem.out: El objeto System.out (el objeto flujo estndar de salida) generalmente permite a un programa mostrar datos en la pantalla; System.err: El objeto System.err (el objeto flujo estndar de error) generalmente permite a un programa mostrar mensajes de error en la pantalla. Cada uno de estos flujos puede redirigirse. Para System.in, esta capacidad permite al programa leer bytes desde un origen distinto. Para System.out y System.err, esta capacidad permite que la salida se enve a una ubicacin distinta, como un archivo en disco.PAQUETE JAVA.IOLos programas de Java realizan el procesamiento de archivos utilizando clases del paquete java.io. Este paquete incluye definiciones para las clases de flujo como:FileInputStream (para la entrada basada en bytes desde un archivo) FileOutputStream (para la salida basada en bytes hacia un archivo).FileReader (para la entrada basada en caracteres desde un archivo). FileWriter (para la salida basada en caracteres hacia un archivo). Los archivos se abren creando objetos de estas clases de flujos, que heredan de las clases InputStream, OutputStream, Reader y WriterLa jerarqua completa de clases en el paquete java.io puede consultarse en la documentacin en lnea, en la pgina:java.sun.com/javase/6/docs/api/java/io/package-tree.html

CLASE FILELa clase File proporciona cuatro constructores. public File( String nombre ):especifica el nombre de un archivo o directorio que se asociar con el objeto File. public File( String rutaAlNombre, String nombre ): usa el argumento rutaAlNombre (una ruta absoluta o relativa) para localizar el archivo o directorio especificado por nombre.public File( File directorio, String nombre ): usa un objeto File existente llamado directorio (una ruta absoluta o relativa) para localizar el archivo o directorio especificado por nombre.public File( URI uri ): Usa el objeto URI dado para localizar el archivo. Un Identificador uniforme de recursos (URI) es una forma ms general de un Localizador uniforme de recursos (URL), el cual se utiliza comnmente para localizar sitios Web.Una ruta absoluta contiene todos los directorios, empezando con el directorio raz, que conducen a un archivo o directorio Una ruta relativa normalmente empieza desde el directorio en el que la aplicacin empez a ejecutarse y es, por lo tanto, una ruta relativa al directorio actual.

clase outputstreamEsta clase abstracta es la superclase de todas las clases que representan un flujo de salida de bytes. Debido a que la clase OutputStream es abstracta, hay varias clases que se derivan de OutputStream y redefinen el mtodo write para darle una implementacin distinta: FileOutputStream ByteArrayOutputStream PipedOutputStream FilterOutputStreamObjectOutputStreamOutputStream

java.lang.Object java.io.OutputStream public abstract class OutputStream extends Object implements Closeable, FlushableMTODOSMODIFICADOR Y TIPOMTODO Y DESCRIPCINVoidclose () : Cierra esta corriente de salida y libera los recursos del sistema asociados con esta corriente.

Voidflush (): Limpia la corriente de salida y fuerza cualquier buffer de salida de bytes para escribirVoidwrite (byte[] b): Escribe el arreglo de bytes al flujo de salida.

Voidwrite (byte[] b, int off, int len): Escribe len bytes desde el arreglo de bytes especificado a partir del desplazamiento off de esta corriente de salida.

Abstract voidwrite (int b): Escribe el byte especificado al flujo de salida.

BYTE ARRAY OUTPUT STREAMRedefine el mtodo write para enviar el byte a un array dinmico (en memoria). Aade los mtodos: public byte[] toByteArray() Public int size()

ByteArrayOutputStream ba; ba = new ByteArrayOutputStream(); for (int i = 0; i < 100; i++) ba.write(i); ba.close(); // Con ba.toByteArray() accedemos al array // con los bytes escritos

Filtro DataOutputStream La clase DataOutputStream aade la funcionalidad de poder enviar todos los tipos primitivos directamente. void writeBytes(String s) throws IOException void writeBoolean(boolean v) throws IOException void writeShort(int v) throws IOException void writeChar(int v) throws IOException void writeInt(int v) throws IOException void writeLong(long v) throws IOException void writeFloat(float v) throws IOException void writeDouble(double v) throws IOException void writeChars(String s) throws IOException

Filtro DataOutputStream DataOutputStream dos; dos = new DataOutputStream(new FileOutputStream(A));

dos.writeInt(i); dos.writeDouble(3.14); dos.writeChars(Hola);

dos.close(); // Se cierra tambin el socio FILE OUTPUT STREAMRedefine el mtodo write para enviar el byte a un fichero.

FileOutputStream f; f = new FileOutputStream(Datos.dat); for (int i = 0; i < 100; i++) f.write(i); f.close(); Clase inputstreamjava.lang.Objectjava.io.InputStreampublic abstract class InputStream extends Object implements Closeable

Esta clase abstracta es la superclase de todas las clases que representan un flujo de entrada de bytesDebido a que la clase OutputStream es abstracta, hay varias clases que se derivan de OutputStream y redefinen el mtodo write para darle una implementacin distinta:FileInputStreamByteArrayInputStreamStringInputStreamSequenceInputStreamPipidedInputStreamInputStreamFilterInputStreamObjectInputStream

MTODOSMODIFICADOR Y TIPOMTODO Y DESCRIPCINintread (byte[] b) Lee un nmero de bytes de la corriente de entrada y los almacena en el buffer del arreglo b

Voidclose () Cierra este flujo de entrada y libera los recursos del sistema asociados con la corriente.

Voidmark (int readlimit): Marca la posicin actual en este flujo de entrada.

intread (byte[] b, int off, int len)Lee hasta len bytes de datos de la secuencia de entrada en un arreglo de bytes.

Abstract intread () Lee el siguiente byte de datos de la corriente de entrada.

byte ARRAY INPUT STREAMEl ByteArrayInputStream redefine el mtodo read para leer el byte de un array que se le pase en el constructor.

byte[] v = new byte[1024]; for (int i = 0; i < v.length; i++) v[i] = i * 2; ByteArrayInputStream ba; ba = new ByteArrayInputStream(v);

int dato; while ((dato = ba.read()) != -1) System.out.println(dato); ba.close(); FILE INPUT STREAMEl FileInputStream redefine el mtodo read para leer el byte de un fichero.

FileInputStream f; f = new FileInputStream(Datos.dat); int dato; while ((dato = f.read()) != -1) System.out.println(dato);

f.close(); STRING INPUT STREAMRedefine el mtodo read para leer el siguiente carcter de una cadena que se le pase en el constructor. Sirve para tratar un String como si fuese un stream

StringInputStream ba; ba = new StringInputStream(Hola);

int dato; while ((dato = ba.read()) != -1) System.out.println(dato); ba.close ();SEQUENCE INPUT STREAMCuando se tienen varios InputStreams que se desean procesar seguidos se pueden concatenar mediante un SequenceInputStream. De esta manera aparecen como un nico InputStream continuo.

FileInputStream f1, f2; f1 = new FileInputStream(Datos1.dat); f2 = new FileInputStream(Datos2.dat); SequenceInputStream sis; sis = new SequenceInputStream(f1, f2); int dato; while ((dato = sis.read()) != -1) System.out.println(dato); sis.close(); BYTE STREAMSejemplo1:programa que COPIA UN ARCHIVO un byte a la vez. Los programas utilizan flujos de bytes para realizar la entrada y salida de bytes de 8 bits. Todas las clases deflujo de bytes son descendientes de InputStream y OutputStream.

We'll explore FileInputStream and FileOutputStream by examining an example program named CopyBytes, which uses byte streams to copy xanadu.txt, one byte at a time.

Filtro DataInputStream La clase DataInputStream aade la funcionalidad de poder leer todos los tipos primitivos directamente. readBoolean() readChar readByte() readShort() readInt() readLong() readFloat() readDouble() readLine() readFully(byte[] b)

Filtro DataInputStream El final del stream se detecta: readLine() devuelve null El resto de mtodos lanza EOFException

DataInputStream dis; dis = new DataInputStream(new FileInputStream(A)); int i = dis.readInt(); double d = dis.readDouble(); String s = dis.readLine();

dis.close(); // Se cierra tambin el socio CLASE FORMATTERjava.lang.Objectjava.util.Formatterpublic final class Formatter extends Object implements Closeable, FlushableEs un intrprete de cadenas de formato de estilo: printf.

Esta clase proporciona soporte para la justificacin diseo y alineacin de formatos comunes para los datos primitivos, La impresin con formato para Java est fuertemente inspirado en C.

Formatter(File archivo) Construye un nuevo formateador con el archivo especificadoCREACIN DE UN ARCHIVO DE TEXTO usando la clase formatterEJEMPLO1LECTURA DE UN ARCHIVO DE TEXTO usando la clase SCANNERLa clase Scanner puede recibir datos de un archivo, en vez del teclado.Object streamsAs como los flujos de datos soportan la entrada o salida de datos primitivos, los object streams soportan la entrada y salida de objetosTodos los mtodos de datos de E / S primitivos cubiertos en corrientes de datos tambin se implementan en los flujos de objetos. Una corriente de objeto puede contener una mezcla de valores primitivos y objeto.La mayora de las clases soportan la serializacion de los objetos, implementando la interfaz serializable

clases Object InputStream/OutputStreamImplementan en forma respectiva a las interfaces ObjectInput y ObjectOutput, que son interfaces de DataInput y DataOutput permiten leer/escribir objetos completos en un flujo (posiblemente un archivo).La accin de inicializar objetos flujo con otros objetos flujo de esta forma se conoce algunas veces como envoltura: el nuevo objeto flujo que se va a crear envuelve al objeto flujo especificado como un argumento del constructor.- Por ejemplo, para envolver un objeto FileInputStream en un objeto ObjectInputStream, pasamos el objeto FileInputStream al constructor de ObjectInputStream.SERIALIZACIN DE OBJETOSLa serializacin de un objeto consiste en obtener una secuencia de bytes que represente el estado de dicho objeto. Esta secuencia puede utilizarse de varias maneras (puede enviarse a travs de la red, guardarse en un fichero para su uso posterior, reestablecer el objeto original, etc.).Para utilizar la serializacin con los archivos, se utiliza el mtodo de envoltura Una vez que se escribe un objeto serializado en un archivo, se puede leer de ese archivo y deserializarse; es decir, la informacin del tipo y los bytes que representan al objeto y sus datos se puede utilizar para recrear el objeto en memoria.Estado de un objetoEl estado de un objeto viene dado, por el estado de sus campos. As, serializar un objeto consiste, bsicamente, en guardar el estado de sus campos. Si el objeto a serializar tiene campos que a su vez son objetos, habr que serializarlos primero. ste es un proceso recursivo que implica la serializacin de todo un grafo (en realidad, un rbol) de objetos.interfaz serializablePara que un objeto sea serializable, debe implementar la interfaz java.io.Serializable. INTERFAZ SERIALIZABLE: Esta interfaz no define ningn mtodo. Simplemente se usa para 'marcar' aquellas clases cuyas instancias pueden ser convertidas a secuencias de bytes (y posteriormente reconstrudas). Objetos tan comunes como String, Vector o ArrayList implementan Serializable, de modo que pueden ser serializados y reconstrudos ms tarde.E/S de objetos complejosWriteObject, el cual toma un objeto Object que implementa a la interfaz Serializable como un argumento y escribe su informacin a un objeto OutputStream. ReadObject, el cual lee y devuelve una referencia a un objeto Object de un objeto InputStream. Una vez que se lee un objeto, su referencia puede convertirse en el tipo actual del objeto. SERIALIZACIN DE OBJETOSDESERIALIZACIN de objetosInterfaces y clases para la entraday salida basadas en caracteresJava proporciona las clases abstractas Reader y Writer, que son flujos basados en caracteres Unicode de dos bytes. Clases BufferedReader/Writer: (subclases de la clase abstract Reader y abstract Writer), permiten el uso del bfer para los flujos basados en caracteres. Clases CharArrayReader/Writer: Leen y escriben, respectivamente, un flujo de caracteres en un arreglo de caracteres. Las clases FileReader (una subclase de InputStreamReader) y FileWriter (una subclase de Output-StreamWriter) leen caracteres de, y escriben caracteres en, un archivo, respectivamente. Las clases PipedReader y PipedWriter implementan flujos de caracteres canalizados, que pueden utilizarse para transferir la informacin entre subprocesos. Las clases StringReader y StringWriter leen y escriben caracteres, respectivamente, en objetos String.Un objeto PrintWriter escribe caracteres en un flujo.