flujos de datos Morales Castillo Karolayn Contenido 2 java.io Class InputStream java.lang.Object java.io.InputStream public abstract class InputStream extends Object implements Closeable Esta clase abstracta es la superclase de todas las clases que representan un flujo de entrada de bytes. Las aplicaciones que necesitan para definir una subclase de InputStream deben siempre proporcionar un mtodo que devuelve el siguiente byte de entrada. Sus subclases son: ByteArrayInputStream public abstract class InputStream extends Object implements Closeable n !yte"rrayInputStream contiene un buffer interno que contiene bytes que pueden ser le#dos desde el stream. n contador interno lleva la cuenta del siguiente byte a ser suministrados por el mtodo de lectura. $errar una !yte"rrayInputStream no tiene ning%n efecto. Los mtodos de esta clase se puede llamar despus de que el flujo se &a cerrado sin que se genere una e'cepci(n IOE'ception. FileInputStream public class FileInputStream extends InputStream n )ileInputStream obtiene bytes de entrada de un arc&ivo en un sistema de arc&ivos. *+u arc&ivos est,n disponibles depende del entorno &ost. )ileInputStream se significa para los flujos de lectura de bytes sin formato como datos de imagen. -ara la lectura de las corrientes de caracteres. considere el uso )ile/eader . FilterInputStream public class FilterInputStream extends InputStream 0 n )ilterInputStream contiene alguna otra secuencia de entrada. que se utili1a como fuente b,sica de los datos. la posible transformaci(n de los datos a lo largo del camino o proporcionar funcionalidad adicional. La clase )ilterInputStream s# simplemente anula todos los mtodos de InputStream con las versiones que pasan todas las solicitudes para el flujo de entrada que contiene. Las subclases de )ilterInputStreampueden anular a%n m,s algunos de estos mtodos. y tambin pueden proporcionar mtodos y campos adicionales. Sus subclases son: o BufferedInputStream public class BufferedInputStream extends FilterInputStream n !ufferedInputStream a2ade funcionalidad a otra entrada corriente. es decir. la capacidad de amortiguar la entrada y para apoyar la marca y restablecer mtodos. $uando el !ufferedInputStream se crea. se crea una matri1 intermedia interna. " medida que se leen o se omiten bytes de la secuencia. el b%fer interno se vuelve a llenar si es necesario del flujo de entrada que contiene. muc&os bytes a la ve1. La marca de la operaci(n se acuerda un punto en el flujo de entrada y el restablecimiento de la operaci(n &ace que todos los bytes le#dos desde la %ltima marca de la operaci(n que se va a volver a leer antes de que nuevos bytes se toman de la corriente de entrada contenida. o DataInputStream public class DataInputStream extends FilterInputStream implements DataInput n flujo de entrada de datos permite una aplicaci(n leer tipos de datos primitivos de 3ava de un flujo de entrada subyacente de una manera independiente de la m,quina. na aplicaci(n utili1a una corriente de salida de datos para escribir datos que luego pueden ser le#dos por un flujo de entrada de datos. 4ataInputStream no es necesariamente seguro para el acceso multiproceso. Seguridad de los &ilos es opcional y es responsabilidad de los usuarios de los mtodos de esta clase. o LineNumberInputStream Desaprobado. Este curso supone incorrectamente que los bytes representan adecuadamente caracteres. A partir del JDK 1.1, la mejor forma de operar en streams de caracteres es a travs de las nuevas clases de personaje-stream, que incluyen una clase para los nmeros de l!nea de conteo. @ Deprecated public class LineNumberInputStream extends FilterInputStream Esta clase es un filtro de flujo de entrada que proporciona la funcionalidad a2adida de mantener un registro del n%mero de l#nea actual. na l#nea es una secuencia de bytes que terminan con un car,cter de retorno de carro 567 r89. un car,cter de nueva l#nea 5 :7 n: 9 o un car,cter de retorno de carro seguido inmediatamente por un car,cter de salto de l#nea. En los tres casos. el personaje 5s9 de terminaci(n de l#nea se devuelven como un solo car,cter de nueva l#nea. El n%mero de l#nea comien1a en ; y se incrementa en < cuando una lectura devuelve un car,cter de nueva l#nea. o us!ba"#InputStream public class PushbacInputStream extends FilterInputStream n -us&bac=InputStream a2ade funcionalidad a otro flujo de entrada. es decir. la capacidad de >&acer retroceder> o >sin leer> un byte. Esto es %til en situaciones en ? las que es conveniente para un fragmento de c(digo para leer un n%mero indefinido de bytes de datos que est,n delimitadas por un valor de byte en particular@ despus de leer el byte de terminaci(n. el fragmento de c(digo puede >leer>. de modo que la siguiente operaci(n de lectura en la secuencia de entrada volver, a leer el byte que fue empujado &acia atr,s. -or ejemplo. los bytes que representan a los personajes que constituyen un identificador pueden ser terminados por un byte que representa un car,cter de operador@ un mtodo cuyo trabajo consiste en leer s(lo un identificador puede leer &asta que ve el operador y luego empuje el operador de nuevo a volver a leer. $bje"tInputStream public class ObjectInputStream extends InputStream implements ObjectInput ! ObjectStreamConstants n ObjectInputStream deseriali1a datos primitivos y objetos escritos previamente usando un ObjectOutputStream. ObjectOutputStream y ObjectInputStream pueden proporcionar una aplicaci(n con almacenamiento persistente para los gr,ficos de los objetos cuando se utili1a con un )ileOutputStream y )ileInputStream respectivamente. ObjectInputStream se utili1a para recuperar los objetos previamente seriali1ados. Otros usos incluyen los objetos que pasan entre los &osts utili1ando una corriente de tubo o de c,lculo de referencias y argumentos desempaquetar y par,metros en un sistema de comunicaci(n a distancia. ObjectInputStream asegura que los tipos de todos los objetos en el gr,fico creado a partir de la corriente coinciden con las clases presentes en la m,quina virtual de 3ava. Las clases se cargan como se requiere el uso de los mecanismos est,ndar. S(lo los objetos que admiten la interfa1 java.io.Seriali1able o java.io.E'ternali1able se pueden leer en los arroyos. El mtodo readObject se utili1a para leer un objeto de la corriente. )undici(n de la caja fuerte de 3ava se debe utili1ar para obtener el tipo deseado. En 3ava. cadenas y matrices son objetos y son tratados como objetos durante la seriali1aci(n. $uando se lee que necesitan para ser ec&ado al tipo esperado. Los tipos de datos primitivos se pueden leer desde la corriente utili1ando el mtodo apropiado en 4ataInput. El mecanismo deseriali1aci(n por defecto para los objetos restaura el contenido de cada campo en el valor y el tipo que ten#a cuando fue escrito. Los campos declarados como transitorio o est,tica son ignorados por el proceso de deseriali1aci(n. Las referencias a otros objetos &acen que estos objetos sean le#dos de la corriente en caso necesario. Las gr,ficas de los objetos se restauran correctamente utili1ando un mecanismo de reparto de referencia. Auevos objetos siempre se asignan al deseriali1ar. que evita que los objetos e'istentes se sobrescriban. La lectura de un objeto es an,logo a la ejecuci(n de los constructores de un nuevo objeto. La memoria se asigna para el objeto y se iniciali1a a cero 5ALL9. $onstructores sin argumentos que se opongan a las clases no seriali1ables y luego los campos de las clases seriali1ables se restauran de la corriente a partir de la clase seriali1able m,s cerca de java.lang.Object y terminando con la clase m,s espec#fica del objeto. -or ejemplo. para leer de una corriente como est, escrito en el ejemplo de ObjectOutputStream: FileInputStream fis = new FileInputStream("t.tmp"); ObjectInputStream ois = new ObjectInputStream(fis); int i = ois.readInt(); String today = (String) ois.readObject(); ate date = (ate) ois.readObject(); ois.close();
$lases controlan la forma en que son seriali1ados mediante la implementaci(n de cualquiera de las interfaces java.io.Seriali1able o java.io.E'ternali1able. B Implementaci(n de la interfa1 Seriali1able permite la seriali1aci(n de objetos para guardar y restaurar todo el estado del objeto y que permite que las clases se desarrollan entre el momento en que el flujo se escriben y el tiempo que se lee. "traviesa autom,ticamente las referencias entre objetos. guardar y restaurar los gr,ficos completos. $lases seriali1ables que requieren un manejo especial durante el proceso de seriali1aci(n y deseriali1aci(n deben implementar los mtodos siguientes: pri"ate "oid #riteObject$ja"a%io%ObjectOutputStream stream&thro#s IO'xception( pri"ate "oid readObject$ja"a%io%ObjectInputStream stream&thro#s IO'xception! ClassNotFound'xception( pri"ate "oid readObjectNoData$& thro#s ObjectStream'xception( El mtodo readObject es responsable de leer y restaurar el estado del objeto de su especial clase utili1ando los datos escritos en el flujo por el mtodo CriteObject correspondiente. El mtodo no tiene que preocuparse por el estado que pertenece a sus superclases o subclases. Estado se restaura mediante la lectura de los datos de la ObjectInputStream para los campos individuales y &acer asignaciones a los campos correspondientes del objeto. La lectura de los tipos de datos primitivos se apoya en 4ataInput. $ualquier intento de leer datos de objeto que e'cede los l#mites de los datos personali1ados escritos por el mtodo CriteObject correspondiente provocar, un Optional4ataE'ception para ser lan1ado con un valor de campo eof de verdad. Ao lee objeto que supere el final de los datos asignados reflejar, el final de los datos de la misma manera que iban a indicar el final de la corriente: byte a byte lee volver, D< como el byte le#do o el n%mero de bytes le#dos. y primitivo lee lan1ar, EO)E'ceptions. Si no &ay ning%n mtodo CriteObject correspondiente. entonces el final de defecto datos seriali1ados marca el final de los datos asignados. -rimitivo y el objeto llamadas emitidas desde dentro de un mtodo comportan readE'ternal de la misma manera de leer D si la secuencia ya est, colocado en el e'tremo de los datos escritos por el mtodo CriteE'ternal correspondiente. objeto lee lan1ar, Optional4ataE'ceptions con juego eof true. byte a byte lee voluntad devuelven D<. y primitivo lee arrojar, EO)E'ceptions. Eenga en cuenta que este comportamiento no se sostiene para los flujos escritas con la edad ObjectStream$onstants.-/OEO$OLFGE/SIOAF< protocolo. en la que el final de los datos escritos por mtodos CriteE'ternal no est, demarcada. y por lo tanto no se puede detectar. El mtodo readObjectAo4ata es responsable de iniciali1ar el estado del objeto de su clase en particular en el caso de que la secuencia de seriali1aci(n no enumera la clase dada como una superclase del objeto que se va a deseriali1ar. Esto puede ocurrir en los casos en que la parte receptora utili1a una versi(n diferente de la clase de la instancia deseriali1ado que la parte que env#a. y la versi(n del receptor e'tiende las clases que no se e'tienden por la versi(n del remitente. Esto tambin puede ocurrir si la secuencia de seriali1aci(n &a sido alterado@ por lo tanto. readObjectAo4ata es %til para iniciali1ar objetos deseriali1ados correctamente a pesar de un flujo fuente >&ostil> o incompleta. Seriali1aci(n no lee o asignar valores a los campos de cualquier objeto que no implementa la interfa1 java.io.Seriali1able. Las subclases de objetos que no son seriali1ables pueden ser seriali1able. En este caso. la clase no seriali1able debe tener un constructor sin argumentos para permitir a sus campos a iniciali1ar. En este caso. es la responsabilidad de la subclase para guardar y restaurar el estado de la clase no seriali1able. Es frecuente que los campos de esa clase son accesibles 5p%blico. paquete o protegida9 o que e'isten mtodos get y set que se pueden utili1ar para restaurar el estado. $ualquier e'cepci(n que se produce al deseriali1ar un objeto ser, capturado por el ObjectInputStream y abortar el proceso de lectura. Implementaci(n de la interfa1 E'ternali1able permite que el objeto de asumir el control total sobre el contenido y el formato de forma seriali1ada del objeto. Los mtodos de la interfa1 E'ternali1able. CriteE'ternal y readE'ternal. est,n llamados a guardar y restaurar el estado de los objetos. $uando se implementa mediante una clase que pueden escribir y leer su propio estado utili1ando todos los mtodos de ObjectOutput y ObjectInput. Es responsabilidad de los objetos para manejar cualquier control de versiones que se produce. H $onstantes de enumeraci(n se deseriali1an manera diferente que los objetos seriali1ables o E'ternali1able ordinarios. La forma seriali1ada de una constante enum consiste %nicamente en su nombre@ valores de campo de la constante no se transmiten. -ara deseriali1ar una constante enum. ObjectInputStream lee el nombre de la constante de la corriente@ la constante deseriali1ado se obtiene entonces mediante una llamada al mtodo est,ticoEnum.valueOf 5clase. String9 con el tipo base de la constante de enumeraci(n y el nombre de constante recibidos como argumentos. "l igual que otros objetos seriali1ables o E'ternali1able. las constantes de enumeraci(n pueden funcionar como los objetivos de referencias anteriores que aparecen posteriormente en la secuencia de la seriali1aci(n. El proceso por el que las constantes de enumeraci(n se deseriali1an no se pueden personali1ar: ninguna readObject espec#fico de clase. readObjectAo4ata y mtodos read/esolve definidas por tipos de enumeraci(n se ignoran durante la deseriali1aci(n. 4el mismo modo. cualquier serial-ersistent)ields o declaraciones de campos serialGersionI4 tambin son ignorados D todos los tipos de enumeraci(n tienen un serialGersionI4 fijo de ;L. ipedInputStream public class PipedInputStream extends InputStream na corriente de entrada de corriente debe conectarse a una corriente de salida de corriente@ el flujo de entrada por tuber#a a continuaci(n. proporciona todo lo bytes de datos se escriben en el flujo de salida de corriente. E#picamente. los datos se leen desde un -ipedInputStream objeto por un &ilo y los datos se escriben en el correspondiente -ipedOutputStream por alg%n otro &ilo. El intento de usar los dos objetos a partir de un solo &ilo. no se recomienda. ya que puede interbloqueos el &ilo. El flujo de entrada por tuber#a contiene un buffer. desacoplar las operaciones de lectura de las operaciones de escritura. dentro de unos l#mites. n tubo se dice que est, roto . si un &ilo que estaba proporcionando bytes de datos al flujo de salida por tuber#a conectada ya no est, vivo. Se%uen"eInputStream public class Se)uenceInputStream extends InputStream n SequenceInputStream representa la concatenaci(n l(gica de otros flujos de entrada. $omien1a con una colecci(n ordenada de los flujos de entrada y lee en el primero &asta el final del fic&ero que se alcan1a. despus de lo cual se lee de la segunda. y as# sucesivamente. &asta que se alcan1a el final del arc&ivo en el %ltimo de flujo de entrada que contiene. Strin&BufferInputStream 'n desuso. Esta clase no convierte correctamente los caracteres en bytes. A partir del JDK 1.1, la mejor forma de crear un flujo de una cadena es a travs de la "trin#$eader clase. @ Deprecated public class Strin*BufferInputStream extends InputStream Esta clase permite una aplicaci(n para crear un flujo de entrada en el que la lectura bytes son suministrados por el contenido de una cadena. Las solicitudes tambin se pueden leer los bytes de una matri1 de bytes mediante el uso de un !yte"rrayInputStream . S(lo los bajos oc&o bits de cada car,cter de la cadena se usa en esta clase. I java.io Class OutputStream java.lang.Object java.io.$utputStream public abstract class OutputStream e!tends Object implements "loseable# Flus$able Esta clase abstracta es la superclase de todas las clases que representan un flujo de salida de bytes. n flujo de salida acepta bytes de salida y los env#a a otras se &unden. Las aplicaciones que necesitan para definir una subclase de OutputStream siempre deben proporcionar al menos un mtodo que escribe un byte de salida. ByteArray$utputStream public class B+te,rra+OutputStream extends OutputStream Esta clase implementa un flujo de salida en el que se escriben los datos en una matri1 de bytes. El tamp(n crece autom,ticamente como se escriben datos en ella. Los datos pueden ser recuperados utili1ando Eo!yte"rray 59 y toString 59 . $errar una !yte"rrayOutputStream no tiene ning%n efecto. Los mtodos de esta clase se puede llamar despus de que el flujo se &a cerrado sin generar una e'cepci(n IOE'ception . J File$utputStream public class FileOutputStream extends OutputStream n flujo de salida de arc&ivo es una secuencia de salida para la escritura de datos a un arc&ivo oa una )ile4escriptor . Sea o no un arc&ivo est, disponible o se puede crear depende de la plataforma subyacente."lgunas plataformas. en particular. permiten a un arc&ivo que se abrir, para la escritura por un solo )ileOutputStream 5u otro objeto de arc&ivo de escritura9 a la ve1. En tales situaciones. los constructores de esta clase se producir, un error si el arc&ivo implicado ya est, abierto. )ileOutputStream es para escribir flujos de bytes primas tales como datos de imagen. -ara escribir r#os de caracteres. considere el uso )ileKriter . Filter$utputStream public class FilterOutputStream extends OutputStream Esta clase es la superclase de todas las clases que los flujos de salida del filtro. Estas corrientes se sientan en la parte superior de un flujo de salida ya e'istente 5el subyacente flujo de salida9 que utili1a como su disipador de base de datos. pero posiblemente la transformaci(n de los datos a lo largo de la forma o proporcionar funcionalidad adicional. La clase )ilterOutputStream s# simplemente anula todos los mtodos de OutputStream con las versiones que pasan todas las solicitudes de la secuencia de salida subyacente. Las subclases de)ilterOutputStream pueden anular a%n m,s algunos de estos mtodos. as# como proporcionar mtodos y campos adicionales. Sus subclases son: o Buffered$utputStream public class BufferedOutputStream extends FilterOutputStream La clase implementa un flujo de salida con buffer. $on la creaci(n de un flujo de salida de tal. una aplicaci(n puede escribir bytes en la secuencia de salida que subyace sin causar necesariamente una llamada al sistema subyacente para cada byte escrito. o Data$utputStream public class DataOutputStream extends FilterOutputStream implements DataOutput n flujo de salida de datos permite una aplicaci(n escribir tipos de datos 3ava primitivos a un flujo de salida de una manera port,til. na aplicaci(n puede utili1ar un flujo de entrada de datos para leer los datos de nuevo pulg $bje"t$utputStream public class ObjectOutputStream extends OutputStream implements ObjectOutput ! ObjectStreamConstants n ObjectOutputStream escribe tipos de datos simples y gr,ficos de objetos 3ava a un OutputStream. Los objetos pueden ser le#dos 5reconstituido9 usando un ObjectInputStream. El almacenamiento persistente de los objetos se puede lograr mediante el uso de un fic&ero para el flujo. Si la corriente es una corriente de soc=et de red. los objetos se pueden reconstituir en otro &ost o en otro proceso. S(lo los objetos que admiten la interfa1 java.io.Seriali1able se pueden escribir en los arroyos. La clase de cada objeto seriali1able es codificada incluyendo el nombre de la clase y la firma de la clase. los valores de los campos y las matrices del objeto. y el cierre de cualquier otro objeto que se &ace referencia a los objetos iniciales. El mtodo CriteObject se utili1a para escribir un objeto en la secuencia. $ualquier objeto. incluyendo cadenas y matrices. se escribe con CriteObject. Garios objetos o primitivas se L pueden escribir en la secuencia. Los objetos deben ser le#dos de nuevo desde el ObjectInputStream correspondiente con los mismos tipos y en el mismo orden en que fueron escritos. Los tipos de datos primitivos tambin se pueden escribir en la secuencia utili1ando los mtodos apropiados de 4ataOutput. Strings tambin se pueden escribir con el mtodo CriteE). El mecanismo de seriali1aci(n predeterminado para un objeto escribe la clase del objeto. la firma de clase. y los valores de todos los campos no transitorios y no est,ticos. Las referencias a otros objetos 5e'cepto en los campos transitorios o est,ticas9 &acer que estos objetos pueden escribir tambin. M%ltiples referencias a un solo objeto se codifican utili1ando un mecanismo de reparto de referencia para que las gr,ficas de los objetos se pueden restaurar en la misma forma que cuando se escribi( el original. -or ejemplo. para escribir un objeto que puede ser le#do por el ejemplo de ObjectInputStream: Fos FileOutputStream - ne# FileOutputStream $.t%tmp.&( ObjectOutputStream oos - ne# ObjectOutputStream $FOS&( oos%#riteInt $/0123&( oos%#riteObject $.4o+.&( oos%#riteObject $ne# Date $&&( oos%close $&(
Las clases que requieren un tratamiento especial durante el proceso de seriali1aci(n y deseriali1aci(n deben implementar mtodos especiales con estas firmas e'actas: pri"ate "oid readObject $corriente ja"a%io%ObjectInputStream& thro#s IO'xception! ClassNotFound'xception( pri"ate "oid #riteObject $corriente ja"a%io%ObjectOutputStream& thro#s IO'xception readObjectNoData pri"ate "oid $& lan5a ObjectStream'xception(
El mtodo CriteObject es responsable de escribir el estado del objeto de su clase en particular por lo que el mtodo readObject correspondiente puede restaurarlo. El mtodo no tiene que preocuparse por el estado que pertenece a superclases del objeto o subclases. Estado se salva por la escritura de los campos individuales de la ObjectOutputStream utili1ando el mtodo CriteObject o mediante el uso de los mtodos para los tipos de datos primitivos soportados por 4ataOutput. Seriali1aci(n no escribe los campos de cualquier objeto que no implementa la interfa1 java.io.Seriali1able. Las subclases de objetos que no son seriali1ables pueden ser seriali1able. En este caso. la clase no seriali1able debe tener un constructor sin argumentos para permitir a sus campos a iniciali1ar. En este caso. es la responsabilidad de la subclase para guardar y restaurar el estado de la clase no seriali1able. Es frecuente que los campos de esa clase son accesibles 5p%blico. paquete o protegida9 o que e'isten mtodos get y set que se pueden utili1ar para restaurar el estado. La seriali1aci(n de un objeto se puede prevenir mediante la aplicaci(n de mtodos CriteObject y readObject que arrojan la AotSeriali1ableE'ception. La e'cepci(n ser, capturado por el ObjectOutputStream y abortar el proceso de seriali1aci(n. Implementaci(n de la interfa1 E'ternali1able permite que el objeto de asumir el control total sobre el contenido y el formato de forma seriali1ada del objeto. Los mtodos de la interfa1 E'ternali1able. CriteE'ternal y readE'ternal. est,n llamados a guardar y restaurar el estado de los objetos. $uando se implementa mediante una clase que pueden escribir y leer su propio estado utili1ando todos los mtodos de ObjectOutput y ObjectInput. Es responsabilidad de los objetos para manejar cualquier control de versiones que se produce. $onstantes de enumeraci(n son seriados de manera diferente que los objetos seriali1ables o E'ternali1able ordinarios. La forma seriali1ada de una constante enum consiste %nicamente en su nombre@ valores de campo de la constante no se transmiten. -ara seriali1ar una constante enum. ObjectOutputStream escribe la cadena devuelta por el mtodo el nombre de la constante. "l igual que otros objetos seriali1ables o <; E'ternali1able. las constantes de enumeraci(n pueden funcionar como los objetivos de referencias anteriores que aparecen posteriormente en la secuencia de la seriali1aci(n. El proceso por el que las constantes de enumeraci(n son seriados no se puede personali1ar@ cualquier mtodo CriteObject y Crite/eplace espec#ficas de clase definidos por los tipos de enumeraci(n se ignoran durante la seriali1aci(n. 4el mismo modo. cualquier serial-ersistent)ields o declaraciones de campos serialGersionI4 tambin son ignorados D todos los tipos de enumeraci(n tienen un serialGersionI4 fijo de ;L. 4atos primitivos. con e'clusi(n de los campos seriali1ables y datos E'ternali1able. se escriben en el ObjectOutputStream en los registros del bloque de datos. n registro de datos de bloque se compone de una cabecera y datos. El encabe1amiento de datos de bloque consta de un marcador y el n%mero de bytes para seguir el encabe1ado. Escrituras de datos primitivos consecutivos se fusionan en un solo registro de bloque de datos. El factor de bloqueo utili1ado para un registro de bloque de datos ser, de <;2? bytes. $ada registro de bloque de datos se llenar, &asta <;2? bytes. o puede escribir cada ve1 que &ay una terminaci(n del modo de bloque de datos. Las llamadas a los mtodos CriteObject ObjectOutputStream. defaultKriteObject y Crite)ields inicialmente terminan cualquier registro de bloque de datos e'istente. iped$utputStream public class PipedOutputStream extends OutputStream na corriente de salida de corriente se puede conectar a una corriente de entrada de corriente para crear un tubo de comunicaciones. El flujo de salida de corriente es el e'tremo emisor de la tuber#a. E#picamente. los datos se escriben a un -ipedOutputStream objeto por un &ilo y los datos se leen desde el conectado -ipedInputStream por alg%n otro &ilo. El intento de usar los dos objetos a partir de un solo &ilo. no se recomienda ya que puede interbloqueos el &ilo. El tubo se dice que est, roto . si un &ilo que estaba leyendo bytes de datos de la cone'i(n &ilo flujo de entrada ya no est, vivo. java.io ClassReader java.lang.Object << java.io.(eader public abstract class Reader e!tends Object implements %eadable# "loseable $lase abstracta para leer streams de caracteres. Los %nicos mtodos que una subclase debe implementar son le#dos 5c&ar NO. int. int9 y close 59. La mayor#a de las subclases. sin embargo. tienen prioridad sobre algunos de los mtodos definidos aqu# a fin de proporcionar una mayor eficiencia. funcionalidad adicional. o ambas cosas. Sus subclases son: Buffered(eader public class Buffered6eader extends 6eader Lee te'to a partir de un flujo de caracteres de entradaD. amortiguando caracteres a fin de proporcionar para la lectura eficiente de caracteres. matrices y l#neas. El tama2o del b%fer puede especificarse. o el tama2o por defecto puede ser utili1ado. El valor por defecto es lo suficientemente grande para la mayor#a de los prop(sitos. En general. cada solicitud de lectura &ec&a de un lector &ace una solicitud de lectura correspondiente a &acerse del car,cter subyacente o flujo de bytes. -or tanto. es aconsejable envolver un !uffered/eader en torno a cualquier lector cuya read 59 operaciones pueden ser costosos. como )ile/eaders y InputStream/eaders. -or ejemplo. Buffered6eader in - Ne# Buffered6eader$nue"o File6eader$.foo%in.&&(
amortiguar, la entrada desde el arc&ivo especificado. Sin memoria intermedia. cada invocaci(n de read 59 o readLine 59 podr#an causar bytes que se leen desde el arc&ivo. convertidos en personajes. y luego regresaron. lo cual puede ser muy ineficiente. Los programas que utili1an 4ataInputStreams para la entrada de te'to se pueden locali1ar mediante la sustituci(n de cada 4ataInputStream con un !uffered/eader apropiado. Su subclase es: o LineNumber(eader public class LineNumber6eader extends Buffered6eader n flujo de caracteres de entrada de buffer que mantiene un registro de los n%meros de l#nea. Esta clase define los mtodos setLineAumber 5int9 y PetLineAumber 59 para establecer y obtener el n%mero de l#nea actual. respectivamente. 4e manera predeterminada. la numeraci(n de l#neas comien1a en ;. Este n%mero se incrementa en cada final de l#nea como se leen los datos. y se puede cambiar con una llamada a setLineAumber 5int9 . Eenga en cuenta sin embargo. que setLineAumber 5int9 en realidad no cambia la posici(n actual de la secuencia@ s(lo cambia el valor que ser, devuelto por PetLineAumber 59 . na l#nea se considera que est, terminado por cualquiera de un avance de l#nea 5:7 n:9. un retorno de carro 5:7 r:9. o un retorno de carro seguido inmediatamente de un salto de l#nea. C!arArray(eader public class Char,rra+6eader extends 6eader Esta clase implementa un b%fer de caracteres que se puede utili1ar como un flujo de caracteresDde entrada. Filter(eader public abstract class Filter6eader extends 6eader <2 $lase abstracta para leer streams de caracteres filtrados. La clase abstracta )ilter/eader s# proporciona mtodos predeterminados que pasan todas las solicitudes a la corriente contenida. Las subclases de )ilter/eader deben reempla1ar algunos de estos mtodos. y tambin pueden proporcionar mtodos y campos adicionales. Su subclase es: o us!ba"#(eader public class Pushbac6eader extends Filter6eader n lector de caracteres de la corriente que permite a los personajes para ser empujado de nuevo en el arroyo. InputStream(eader n InputStream/eader es un puente de flujos de bytes a streams de caracteres: Se lee bytes y los decodifica en caracteres que utilicen un determinado c&arset . El mapa de caracteres que se utili1a se puede especificar por nombre o se puede administrar de forma e'pl#cita. o conjunto de caracteres por defecto de la plataforma puede ser aceptada. $ada invocaci(n de una de lectura de un InputStream/eader 59 mtodos puede causar uno o m,s bytes que se leen desde el flujo de bytes de entrada subyacente. -ara &abilitar la conversi(n eficiente de los bytes a caracteres. m,s bytes pueden ser le#dos por delante de la corriente subyacente de los necesarios para satisfacer la operaci(n de lectura actual. -ara mayor eficiencia. considere envolver un InputStream/eader dentro de un !uffered/eader. -or ejemplo: Buffered6eader in - Ne# Buffered6eader$nue"o InputStream6eader$S+stem%in&&( Su subclase es: o File(eader public class File6eader extends InputStream6eader $lase de conveniencia para la lectura de arc&ivos de caracteres. Los constructores de esta clase se supone que la codificaci(n de caracteres por defecto y el tama2o en bytes del b%fer por defecto son adecuadas. -ara especificar estos valores usted mismo. construir un InputStream/eader en un )ileInputStream. )ile/eader se significa para los flujos de lectura de los caracteres. -ara la lectura de las corrientes de bytes sin formato. considere el uso de un )ileInputStream . iped(eader public class Piped6eader extends 6eader )lujo de car,cter piped de entrada. Strin&(eader public class Strin*6eader extends 6eader n flujo de caracteres cuya fuente es una cadena. <0
java.io Class Writer java.lang.Object java.io.)riter public abstract class )riter e'tends Object implements "ppendable. $loseable. )lus&able $lase abstracta por escrito a streams de caracteres. Los %nicos mtodos que una subclase debe implementar son Crite 5c&ar NO. int. int9. flus& 59 y close 59. La mayor#a de las subclases. sin embargo. tienen prioridad sobre algunos de los mtodos definidos aqu# a fin de proporcionar una mayor eficiencia. funcionalidad adicional. o ambas cosas. Buffered)riter public class Buffered7riter extends 7riter Escribe te'to en un flujo de caracteres de salida. amortiguando los personajes con el fin de prever la escritura eficiente de caracteres simples. matrices y cadenas. El tama2o del b%fer puede especificarse. o el tama2o por defecto puede ser aceptada. El valor por defecto es lo suficientemente grande para la mayor#a de los prop(sitos. Se proporciona un mtodo de nueva l#nea 59. que utili1a la propia noci(n de la plataforma de la l#nea de separaci(n seg%n la definici(n de la propiedad del sistema line.separator . Ao todas las plataformas utili1an el car,cter de nueva l#nea 5:7 n:9 para terminar las l#neas. -or lo tanto. se llama a este mtodo para concluir cada l#nea de salida se prefiere escribir un car,cter de nueva l#nea directa. En general. un escritor env#a su salida de inmediato con el car,cter subyacente o flujo de bytes. " menos que se requiere la salida del sistema. se recomienda para envolver un !ufferedKriter alrededor de cualquier escritor cuya Crite 59 operaciones pueden ser costosos. como )ileKriters y OutputStreamKriters. -or ejemplo. Print7riter cabo-Ne# Print7riter$nue"a Buffered7riter$nue"a File7riter$.foo%out.&&&(
amortiguar, la salida del -rintKriter al arc&ivo. Sin memoria intermedia. cada invocaci(n de un mtodo print 59 causar#a personajes se conviertan en bytes que luego se escriben inmediatamente al arc&ivo. que puede ser muy ineficiente. C!arArray)riter public class Char,rra+7riter extends 7riter Esta clase implementa un b%fer de caracteres que se puede utili1ar como un escritor. El buffer crece autom,ticamente cuando los datos se escriben en la secuencia. Los datos pueden ser recuperados utili1ando Eo$&ar"rray 59 y toString 59. Aota: "l invocar close 59 en esta clase no tiene ning%n efecto. y los mtodos de esta clase se puede llamar despus de que el flujo se &a cerrado sin que se genere una e'cepci(n IOE'ception. Filter)riter <? public abstract class Filter7riter extends 7riter $lase abstracta para escribir secuencias de caracteres filtrados. La clase abstracta )ilterKriter s# proporciona mtodos predeterminados que pasan todas las solicitudes a la corriente contenida. Las subclases de)ilterKriter deben reempla1ar algunos de estos mtodos. y tambin pueden proporcionar mtodos y campos adicionales. $utputStream)riter public class OutputStream7riter extends 7riter n OutputStreamKriter es un puente de car,cter arroyos de flujos de bytes: $aracteres grabados en ellos se codifican en bytes usando un determinado c&arset . El mapa de caracteres que se utili1a se puede especificar por nombre o se puede administrar de forma e'pl#cita. o conjunto de caracteres por defecto de la plataforma puede ser aceptada. $ada invocaci(n de un mtodo Crite 59 &ace que el convertidor de codificaci(n que se invoca en el personaje 5s9 dado. Los bytes resultantes se acumulan en un b%fer antes de que se escriban en la secuencia de salida subyacente. El tama2o de este b%fer se puede especificar. pero por defecto. que es lo suficientemente grande para la mayor#a de los prop(sitos. Eenga en cuenta que los personajes se pasan a la escritura 59 se no amortiguadas. -ara mayor eficiencia. considere envolver un OutputStreamKriter dentro de un !ufferedKriter a fin de evitar invocaciones convertidor de frecuencia. -or ejemplo: 'scritor cabo - Ne# Buffered7riter$nue"a OutputStream7riter$S+stem%out&&( n par suplente es un personaje representado por una secuencia de dos carac valores: n #ran sustituto en el rango :7 u4J;;: a :7 u4!)): seguido de una baja sustituta en el rango :7 u4$;;: a :7 u4))):. n elemento sustituto malformado es un suplente alto que no vaya seguida de un suplente bajo o un suplente bajo que no est, precedido por un suplente alto. Esta clase siempre reempla1a elementos sustitutos malformados y secuencias de caracteres no se puede asignar con defecto del c&arset secuencia de sustituci%n . El $&arsetEncoder clase se debe utili1ar cuando se requiere un mayor control sobre el proceso de codificaci(n. Sus subclases son: o File)riter public class File7riter extends OutputStream7riter $lase de conveniencia para escribir arc&ivos de caracteres. Los constructores de esta clase se supone que la codificaci(n de caracteres por defecto y el tama2o en bytes del b%fer por defecto son aceptables. -ara especificar estos valores usted mismo. construir un OutputStreamKriter en un )ileOutputStream. Sea o no un arc&ivo est, disponible o se puede crear depende de la plataforma subyacente. "lgunas plataformas. en particular. permiten a un arc&ivo que se abrir, para la escritura por un solo )ileKriter 5u otro objeto de arc&ivo de escritura9 a la ve1. En tales situaciones. los constructores de esta clase se producir, un error si el arc&ivo implicado ya est, abierto. )ileKriter es para escribir r#os de caracteres. -ara la escritura de flujos de bytes sin formato. considere el uso de un )ileOutputStream . iped)riter public class Piped7riter extends 7riter )lujo de car,cter piped de salida. rint)riter <B public class Print7riter extends 7riter Imprime el formato representaciones de objetos en una secuencia de te'to de salida. Esta clase implementa todos los impresos mtodos que se encuentran en -rintStream . Ao contiene mtodos para escribir bytes sin formato. para las que un programa debe utili1ar secuencias de bytes sin codificar. " diferencia de la -rintStream clase. si el lavado autom,tico est, &abilitado se &ar, s(lo cuando uno de los println . printf . o formato mtodos se invoca. en lugar de cada ve1 que un car,cter de nueva l#nea pasa a ser la salida. Estos mtodos utili1an propia noci(n de la plataforma de la l#nea de separaci(n en lugar del car,cter de nueva l#nea. Los mtodos de esta clase nunca generan e'cepciones de E Q S. aunque algunos de sus constructores pueden. El cliente puede preguntar si los errores se &an producido mediante la invocaci(n c&ec=Error 59 . Strin&)riter public class Strin*7riter extends 7riter n flujo de caracteres que recoge su salida en un b%fer de cadena. que luego se puede utili1ar para construir una cadena. $errar una StringKriter no tiene ning%n efecto. Los mtodos de esta clase se puede llamar despus de que el flujo se &a cerrado sin generar una e'cepci(n IOE'ception . Bibliografa Oracle. 5s.f.9. &racle. /ecuperado el ;I de mayo de 2;<?. de &ttp:QQdocs.oracle.comQjavaseQHQdocsQapiQinde'DfilesQinde'D<.&tml Gidal. R. 5mayo de 2;<?9. "rc&ivos de "cceso Secuencial. Erujillo. Erujillo. -eru. <H