Está en la página 1de 5
A US TEKNOLOGI Escuela Superior de Ingenieros + Ingeniarien Goi Mailako Eskola Aprenda Java como si estuviera en primero 8 8 Javier Garcia de Jalon « José Ignacio Rodriguez « Itigo Mingo Aitor Imaz Alfonso Brazalez « Alberto Larzabal « Jess Calleja + Jon Garcia, Capitulo 9: Enaradatsalida de datos en Java 1.1 pigina 151 9, ENTRADA/SALIDA DE DATOS EN JAVA L.1 Los programas necesitan comunicarse con su entomo, tanto para recoger datos e informacién que deben procesar, como para devolver los resultados obtenidos. La manera de representar estas entradas y salidas en Java es a base de streams (flujos de datos). Un stream es una conexién entre el programa y la fuente 0 destino de los datos. La informa- cidn se traslada en serie (un caracter a continuacién de otro) a través de esta conexién. Esto da lugar una forma general de reptesentar muchos tipos de comunicaciones, Por ejemplo, cuando se qu ir algo en pantalla, se hace a través de un stream que conecta el monitor al programa. Se da a ese stream la orden de escribir algo y éste lo traslada a la pantalla, Este concepto es suficientemente general para representar la lectura/escritura de archivos, la comunicacién a través de Internet o la lectura de la informacién de un sensor a través del puerto en serie. 9.1 CLASES DEAVA PARA LI ECTURA Y ESCRITURA DE DATOS El package java.io contiene las clases necesarias para la comunicacion del programa con el exterior. Dentro de este package existen dos familias de jerarquias distintas para Ia entrada/salida de datos. La diferencia principal consiste en que una opera con bytes y la otra con caracteres (el caricter de Java esta formado por dos bytes porque sigue el cédigo Unicode). En general, para el mismo fin hay dos clases que manejan bytes (una clase de entrada y otra de salida) y otras dos que manejan caracteres. Desde Java 1.0, la entrada y salida de datos del programa se podia hacer con clases derivadas, de InpuStream (para lectura) y OutputStream (para escritura). Estas clases tienen los métodos bisicos read) y write que manejan bytes y que no se suelen utilizar directamente. La Figura 9.1 muestra las clases que derivan de InputStream y la Figura 9.2 las que derivan de OutputStream. Suieecepuiiresn ‘GbecOupusvean Figura 9.1. Jerarguia de clases InputStream, Figura 9.2, Jeranuia de clases OutputStream. ‘Coppi © 2000 TECNUN, tase Gari de in, Joe ie Roane Figo Vinge. Ale War, Wns Basle Abate Caras ais aj on Gata. Toons os dechesresevake Es proba praca al 2 peal on tne Cmts ype aque mai Sl ‘aise ear pg Sto ea pers stent y alan on nes prsanes En Java 1.1 aparecieron dos nuevas familias de clases, derivadas de Reader y Writer, que manejan caracteres en ver de bytes. Estas clases resultan mas practicas para las aplicaciones en las ‘que Se maneja texto, Las clases que heredan de Reader estén inctuidas en la Figura 9.3 y las que hetedan de Writer en la Figura 9.4. oo [[Ratccaranier ] [eRaaTemRoeia] [nouStcantesie] [ Fae | [Aparna] [Samora ae oS ee eS Oe SS Figura 9.4 Jerarquia de clases Writer. En las cuatro iiltimas figuras las clases con fondo gris definen de donde o a dnde se estén enviando los datos, es decir, el dispositive con gue conecta el stream. Las demas (fondo blanco) aden caracteristicas particulares a la forma de enviarlos. La intencidn es que se combinen para obtener el comportami ButferedReader = new Bufferedfeader (new Fileke: to deseado. Por ejemplo: Con esta linea se ha creado un stream que permite leer del archivo autoexec.bat. Ademés, se hha creado a partir de él un objeto BufferedReader (que aporta la caracterist de utilizar buffer"). Los earacteres que Heguen a través del FileReader pasarin a través del BufferedReader, es decit utiizaran el buffer: A Ia hora de definir una comunicacién con un ispositivo siempre se comenzara determinando el origen o destino de la comunicacién (clases en gris) y luego se le afladiran otras caracteristicas (clases en blanco). Se recomienda utilizar siempre que sea posible las clases Reader y Writer, dejando las de Java 1.0 para cuando sean imprescindibles, Algunas tareas como la serializacién y la compresin necesitan las clases InputStream y OutputStream. 9.1.1 Los nombres de las clases de java.io Las clases de java.io siguen una nomenclatura sistemiitica que permite deducir su funcidn a partir de las palabras que componen el nombre, tal como se deseribe en la Tabla 9.1 Un buffer es un es de memoria intern ia que acti de “volchén™ de datos, Cuando se nevesita un dato det disco se trac a memoria ese dato ¥ sus datos contiguos. de mado que la siguiente vez que se nceesite algo del disco la robubilidad de que es ca muy alla. Algo similar se hace para escritua,intentando realizar en un sola operacin de eseriturafsiea varias sentenciasindividuales de escrtura ‘ow sien Gala. Tocr lr recon resaracon Ea gra aps a at! on ines tomer po Sauer mee de ‘ont de ess papas Sh ea pela simp y akan con ines peseres Capitulo 9: Entradasalida de datos en Java 1.1 peigina 153 Palabra Signifieado InputStream, OuiputSiream Loctur/Esertura de Bytes | Reader, Writer ‘Lectura/Escritura de caractores Tile ‘Archivos. ‘Suing. CharAnay, ByleAray. St ‘Memoria (a waves dol tipo primitive indicado) Piped Tubo de datos Burlerad Butler Filter Filo Data —Tinereamibio de datos en Tormato propio de Java ‘Object Persistencia de objets Print Imprimir ‘Tabla 9.1. Palabras identificativas de las clases de java. 9.1.2 Clases que indican el origen 0 destino de los datos La Tabla 9.2 explica el uso de las clases que definen el lugar con que conecta el stream. (Clases Funcién que realizan mae FileReader, FileWriter, FilelnputStream y ‘Son las clases que len y eseriben en archives de disco. Se FileOutputStream cexplcarin luego eon mis detalle. StringReader, StringWeiter, CharArrayReader, | Estas clases tienen en eomitin que se comunican con la memoria Chat rray Writer, ByteAmray InputStream, del ordenador. En ver de aeceder del modo habitual at ByteArray OutputStream, StringBufertnputs ‘contenido de un String, por ejemplo, lo leen como si legara ‘earcter a careter. Son itles cuando se busca un modo general €ikentico de tratar con todos los dispositives que mania un programa, PipedRicader PipedWriter, PipedinputStream, | Se utlizan como un “tubo” o conexion bilateral para PipedOuputSiream ‘tansmisin de datos. Por ejemplo, en un programa con dos threads pueden permitir la comunicacion entre ellos. Un thread tiene el objeto PipedReader y el otr el Piped Write. Silos streams estin conectados, lo que se escriba en el Piped Writer «queda disponible pura que se lea del PipedReader, Tambiet puede comuniear a dos programas distintos. Tabla 9.2. Clases que indican el origen o destino de los datos. “Gap © 2000 TEC, Jor Gla Go Jan, Jub aco Raagwae, Figo igo, Axa. Rowe Brae. Rw waa, ais alt don Gara. Tote ls derechos reserves Esa pronto serosa a paral con hes comercnle er clue mes de ‘entra de xa pages Sto ofa pers sv strony uso ow he perce, 9.1.3. Clases que afladen caracteristicas La Tabla 9.3 explica las funciones de las clases que alteran el comportamiento de un stream ya definido. Clases Funcién que realizan BufleredReader, Buffered Writer, ‘Como ya se ha dicho, anaden un buffer al mangjo de los datos, BufleredinpuSream, BufferedOuputStream | Es deci, se reducen las operaciones directa sobre el dispositive | (lceturas de disco, comunicaciones por red), para hacer mis cicente su uso. BufferedReader por gjemplo tiene el iodo | readLined) que lee una linea y la devuelve como un String. InputStreamReader, OuiputSieeam Writer Son clases puente que permiten convert steams que utlizan bytes en otros que manejan caracteres. Son la nica relacin entre ambas jeranuias y no existen clases que realcen la transformacion inverse ‘ObjecttnputSieam, ObjestOurpurSiream Pertenecen al mecanismo de la serializaién y se explicarin mis _ adelante FilterReader, Filter Writer, FilterinputStream, ‘Son clases Base para aplica diversos fltroso procesos al stream FilterOutputStream de datos. Tambien se podrian extender para conseguir a ‘comportamientos a medida DatalnputStream, DataOutpurSiream Se ulilizan para escribir y leer datos directamente en los formatos propios de Java. Los convierten en algo ilegible, pero independiente de plataforma y se usan por tanto para almacenaje © para transmisiones ene ordenadores de distinte “Tuncionamiento Print Writer, PrinStream Tienen métodos adapiados para imprimir las variables de Java com la apariencia normal. A pati de un boolean eseriben “tue” “false”, colocan la coma de un nero decimal. el Tabla 9,3. Clases que aftaden carateristcas 9.2 ENTRADA Y SALIDA ESTANDAR (TECLADO Y PANTALLA) En Java, la entrada desde teclado y la salida a pantalla estin reguladas a traves de la clase System. Esta clase pertenece al package javalang y agrupa diversos métodos y objetos que tienen relacién con el sistema local. Contiene, entre otros, tres objetos statie que son: System.in: Objeto de la clase InputStream preparado para recibir datos desde la entrada estandar del sistema (habitualmente el teclado). System.out: Objeto de la clase PrintStream que imprimiré los datos en Ia salida estindar del sistema (normalmente asociado con la pantalla). Systemerr: Objeto de la clase PrintStream. Utilizado para mensajes de error que salen también por pantalla por defecto, Estas clases permiten la comunicacién alfanumérica con el programa a través de lo métodos incluidos en la Tabla 9.4. Son métodos que permiten la entrada/Salida a un nivel muy elemental pa © 2 TEENON, Cn Ja, ine ra Rote. a eo, Hein, Aflovs Bana. Rit ana ik ‘tena de eae pags Sioa peri st pest yz cows pee,

También podría gustarte