FLUJO DE BITES Y CADENAS                                StreamCualquier programa realizado en Java que necesite llevar a c...
subclases concretas que implementan los métodos definidos en ellas      siendo los más destacados los métodos read() y wri...
que wrappear para convertir de byte a char.Ejemplo 1. Lectura de consola.//En este ejemplo leemos de consola cadenas de ca...
public static void main(String args[]) {/*El constructor toma como parámetros un objeto de tipo OutputStream delcual deriv...
sus propiedades es crear una instancia a la que le pasamos un objeto File dela siguiente manera:El paquete java.ioManejo d...
}}//Fin clase FileDemo      Las clases orientadas a flujo de bytes ( Bytes Stream).En apartados anteriores habíamos discut...
IMPORTANTE: Si el fichero existe, cuando vayamos a escribir sobre él, seborrará a menos que le digamos que añada los datos...
 BufferedInputStream.Las clases orientadas a buferizar los flujos de bytes asignan un buffer dememoria a los streams de I...
Las clases orientadas a flujo de caracteres ( Character      Stream).Aunque las clases orientadas al flujo de bytes nos pr...
Flujos estándares• Los flujos estándar de entrada y salida siempre están abiertos mientras seejecuta el programa, listos p...
Redirigir los flujos estándares• Podemos redirigir los flujos estándares de entrada y salida para leer oescribir a un fich...
• Un flujo, o stream, es una conexión entre un programa y una fuente odestino de datos.• Un flujo de entrada maneja los da...
• Los flujos de caracteres se usan para manipular datos legibles por humanos(por ejemplo un fichero .txt).• Los flujos de ...
mientras se están transmitiendo los datos) , así permitiendo leer lineasenteras:public String readLine() throws IOExceptio...
Establece un flujo de entrada para leer caracteres desde una fuente externa(fichero). Los métodos read de FileReader solo ...
byte, 8 bits.Reader y Writer son las clases bases de la jerarquía para los flujos decaracteres. Para leer o escribir datos...
int read(char buf[], int offset, int len)InputStream proporciona métodos similares para leer un byte o un array debytes.in...
Próxima SlideShare
Cargando en…5
×

Flujos de bytes y cadenas

5.541 visualizaciones

Publicado el

Publicado en: Tecnología
0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
5.541
En SlideShare
0
De insertados
0
Número de insertados
4
Acciones
Compartido
0
Descargas
75
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Flujos de bytes y cadenas

  1. 1. FLUJO DE BITES Y CADENAS StreamCualquier programa realizado en Java que necesite llevar a cabo unaoperación de I/O lo hará a través de un stream. Un stream, cuya traducciónliteral es "flujo", es una abstracción de todo aquello que produzca o consumainformación. Podemos ver a este stream como una entidad lógica. Lavinculación de este stream al dispositivo físico la hace el sistema de entrada ysalida de Java. Se ve pues la eficacia de esta implementación pues las clases ymétodos de I/O que necesitamos emplear son las mismasindependientemente del dispositivo con el que estemos actuando, luego, elnúcleo de Java, sabrá si tiene que tratar con el teclado, el monitor, unsistema de ficheros o un socket de red liberando a nuestro código de tenerque saber con quién está interactuando.Java define dos tipos de streams:  Byte streams : Nos proporciona un medio adecuado para el manejo de entradas y salidas de bytes y su uso lógicamente está orientado a la lectura y escritura de datos binarios. El tratamiento del flujo de bytes viene gobernado por dos clases abstractas que son InputStream y OutputStream. Cada una de estas clases abstractas tienen varias subclases concretas que controlan las diferencias entre los distintos dispositivos de I/O que se pueden utilizar. Así mismo, estas dos clases son las que definen los métodos que sus subclases tendrán implementados y, de entre todas, destacan las clases read() y write() que leen y escriben bytes de datos respectivamente.  Character streams : Proporciona un medio conveniente para el manejo de entradas y salidas de caracteres. Dichos flujos usan codificación Unicode y, por tanto, se pueden internacionalizar. Una observación: Este es un modo que Java nos proporciona para manejar caracteres pero al nivel más bajo todas las operaciones de I/O son orientadas a byte. Al igual que la anterior el flujo de caracteres también viene gobernado por dos clases abstractas: Reader y Writer. Dichas clases manejan flujos de caracteres Unicode. Y también de ellas derivan
  2. 2. subclases concretas que implementan los métodos definidos en ellas siendo los más destacados los métodos read() y write() que, en este caso, leen y escriben caracteres de datos respectivamente. Los streams predefinidos.Para comprender un poco mejor cómo funciona el paquete de I/O, veamoscómo trabaja realmente la clase System.System define tres campos que son in, out y err que corresponden a laentrada estándar, la salida estándar y la salida estándar de errores. System.ines un objeto de tipo InputStream mientras que los otros dos son de tipoPrintStream. La pregunta que ahora te harás es ¿cómo es posible que si youso la clase Sytem para mandar texto , por ejemplo a la salida, sea de tipoByte? Pues bien, esto se soluciona haciendo un “wrapping” (envoltorio) de laclase para convertirla a un flujo de caracteres. Lectura de consola.La entrada de consola, como sabemos, la obtenemos leyendo de System.in.Para conseguir un flujo de caracteres envolvemos dicha clase en un objetodel tipo BufferedReader, el cual soporta un flujo de entrada buferizado.Atendiendo a las especificaciones de esta clase, el parámetro que se le pasaes el stream de entrada que es de tipo Reader, el cual, como sabemos esabastracto por lo que recurriremos a una de sus subclases, en nuestro casoserá InputStreamReader que convierte bytes a caracteres. Otra vez más,atendiendo a la especificación de esta última clase vemos que el parámetroque se le pasa es de tipo InputStream, o sea, la entrada orientada a byte queen nuestro caso es System.in. Ya está, ya hemos asociado un dispositivo físico(el teclado) a un stream orientado a caracteres mediante el wrapping de laclase System con la clase BufferedReader. Resumamos los pasos:1. BufferedReader (Reader input); clase que recibe un flujo de caracteres deentrada.2. InputStreamReader ( InputStream input2) ; clase que convierte de byte acarácter.3. BufferedReader br = new BufferedReader(newInputStreamReader(System.in); br es unCharacter Stream que se linka a la consola a traves de la clase System.in lacual hemos tenido
  3. 3. que wrappear para convertir de byte a char.Ejemplo 1. Lectura de consola.//En este ejemplo leemos de consola cadenas de caracteres.import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.IOException;public class LecturaStringConsola {Public static void main (String args []) throws IOException {String cadena;BufferedReader br;//Creamos un BufferedReader a través de System.inbr = new BufferedReader (new InputStreamReader (System.in));System.out.println("Empieza a escribir, stop para salir");//leemos cadena de caracteres mediante readLine ().do {cadena = br.readLine ();System.out.println (cadena);} while (!cadena.equals("stop"));}}//Fin LecturaStringConsola Imprimir a consola.Lo que siempre hacemos es imprimir mediante System.out pero en unaaplicación más formal haremos uso de la clase PrintWriter que soporta flujosde caracteres. Esta clase contiene los métodos print() y println() para todoslos tipos por lo que se podrán usar igual que lo hacíamos con System.out. Siun argumento no es de un tipo simple, entonces, los métodos dePrintWriter llaman al método toString() y luego imprimen el resultado.Ejemplo 2. Imprimir a pantalla.//En el siguiente ejemplo básico imprimimos a consola diferentes tipos dedatos primitivos.import java.io.PrintWriter;public class Imprimir {
  4. 4. public static void main(String args[]) {/*El constructor toma como parámetros un objeto de tipo OutputStream delcual deriva PrintStream, por tanto, ya tenemos linkada la clase con eldispositivo de salida (la consola).*/PrintWriter pw = new PrintWriter(System.out, true);pw.println("Imprime una cadena de texto");int i = 15;pw.println("Imprime un entero " + i);double d = 6.8e-9;pw.println("Imprime un double " + d);}} Lectura y escritura de ficheros.En Java, todos los ficheros son orientados a byte por lo que nos proporcionamétodos para leer y escribir desde/a un fichero. No obstante, también nospermite hacer “wrapping” de dicho flujo orientado a byte para convertirlo aun objeto basado en caracteres.Las dos principales clases que nos posibilitan trabajar con los ficheros sonFileInputStream y FileOutputStream las cuales crean un enlace entre el flujode bytes y el fichero. Para abrir un fichero simplemente le pasamos alconstructor de estas clases el nombre de éste, luego con los métodos read() ywrite() actuaremos sobre él y finalmente mediante el método close()cerramos la sesión con el fichero. Más adelante se detallan un poco másestas clases y las acompañamos de algunos ejemplos útiles.ADVERTENCIA: No confundir las dos clases anteriores con la clase File. Ésta,para empezar, no trabaja sobre un flujo de bytes sino que trata directamentecon el fichero y con el sistema de ficheros. Es decir, con esta clase noaccedemos a los datos de los ficheros, está orientada a obtener y/omanipular la información asociada a éste como, por ejemplo, permisos,fechas, si es un fichero o un directorio, el path, etc... Así cuando creamos unainstancia de File, lo que estamos haciendo es establecer un enlace con unarchivo o directorio físico al que luego le podremos consultar todas suspropiedades. Lo recomendable, para poder acceder a los datos del fichero y a
  5. 5. sus propiedades es crear una instancia a la que le pasamos un objeto File dela siguiente manera:El paquete java.ioManejo de las I/OFile f = new File (“ruta_del_fichero”); instancia del descriptor del fichero.FileInputStream fis = new FileInputStream( f ); instancia de la clase que nospermite leer los datos.Ejemplo 3. Obtención de las propiedades de un fichero./*En este ejemplo presentamos algunos de los métodos que la clase File nosproporciona para conocer los detalles de un fichero.*/import java.io.File;import java.io.IOException;import java.net.MalformedURLException;class FileDemo {static void imprimir(String s) {System.out.println(s);}public static void main(String args[]) {File fich = new File("pon la ruta del fichero que quieras");imprimir("Nombre del fichero : " + fich.getName());imprimir("Path relativo : " + fich.getPath());imprimir("Path Absoluto : " + fich.getAbsolutePath());imprimir("Directorio padre : " + fich.getParent());imprimir(fich.exists() ? "existe" : "no existe");imprimir("Ultima modificación del fichero : " + fich.lastModified());imprimir(fich.canWrite() ? "es de escritura" : "no es de escritura");imprimir(fich.canRead() ? "es de lectura" : "no es de lectura");imprimir(fich.isFile() ? "fichero normal" : "no normal");imprimir("Tamaño del fichero : " + fich.length() + "Bytes");try {imprimir("URL del fichero : " +fich.toURL());} catch (MalformedURLException urle) {imprimir(urle.getMessage());}fich.setReadOnly();//también podemos modificar sus atributos.
  6. 6. }}//Fin clase FileDemo Las clases orientadas a flujo de bytes ( Bytes Stream).En apartados anteriores habíamos discutido que en la cima de la jerarquía deestas clases estaban las clases abstractas InputStream y Outputstream.Veámos ahora las subclases concretas más importantes:  ByteArrayInputStream y ByteArrayOutputStream.Implementan un flujo de entrada y salida de bytes respectivamente teniendocomo fuente unarray de bytes en el caso de la clase de entrada. En el caso de la clase quemaneja la salidaexisten dos tipos de constructores: el 1º crea un buffer de 32 bytes y el 2ºcrea un buffer deltamaño que le digamos en el parámetro.  FileInputStream.Como ya vimos, esta clase crea un InputStream que usaremos para leer losbytes del fichero.Define varios constructores de los cuales destacan el que le pasamos comoparámetro unString que contiene la ruta completa del fichero y otro al que le pasamos unobjeto de tipoFile. En todos los casos, si el fichero no existe se debe lanzar la excepciónFileNotFoundException. La sintáxis de los constructores más habituales es:FileInputStream(String ruta_fichero);FileInputStream(File fichero);//fichero es la descripción del archivo. FileOutputStream.Este, al contrario que el anterior crea un OutputStream para enviar un flujode bytes a un fichero. Igualmente al constructor le podemos pasar la rutacompleta del archivo o un objeto de tipo File. Dado que esta operación es deriesgo, la clase puede lanzar una SecurityException. Así mismo, se puedenlanzar las excepciones IOException y/o FileNotFoundException si, porejemplo, el fichero no se puede crear. La sintáxis de los constructores máshabituales es:FileOutputStream(String ruta_fichero);FileInputStream(File fichero);//fichero es la descripción del archivo.
  7. 7. IMPORTANTE: Si el fichero existe, cuando vayamos a escribir sobre él, seborrará a menos que le digamos que añada los datos al final de éstemediante el constructorFileOutputStream(String filePath, boolean append), poniendo append a true.Antes de mostrarte algun ejemplo, veamos 1º los streams de bytes filtradospara luego combinarlos en el ejemplo. Las clases orientadas al filtrado del flujo de bytes (Filtered Byte Stream).Estas clases son simplemente wrappers de la entrada o salida de los streams.Dichas clases proporcionan de manera transparente a estos flujos unafuncionalidad de un nivel superior dado que las clases orientadas a flujo debytes quedan algo limitadas para "trabajar" sobre los datos leidos o sobre losdatos que vamos a escribir.Lo que se hace es acceder al flujo de bytes por medio de alguna de las claseso métodos comentados en los apartados anteriores (normalmenteInputStream) y, luego, se "envuelven" con alguna de las clases orientadas afiltrarlos para realizar operaciones algo más complejas como, por ejemplo,buferizar los datos, traslación de caracteres o datos crudos o, una de las másimportantes, convertir los bytes leidos a alguno de los tipos primitivos deJava (byte, short, int, etc...).Las clases más representativas de este tipo son FilterInputStream yFilterOutputStream aunque a continuación pasaré a explicar las más útiles.  DataInputStream.La importancia de esta clase radica en que nos permite convertir la lectura deun flujo de bytes en uno de los tipos primitivos que Java nos proporcionasegún la forma que nos interese"empaquetar" esos bytes leídos. El único constructor crea unFilterInputStream y guarda el argumento que se le pasa para usarloposteriormente. Su sintáxis es: DataInputStream(InputStream in);  DataOutputStream.Esta clase hace lo inverso de la anterior. Escribe a un flujo de salida de bytescon alguno de los tipos de datos primitivos de Java. La sintáxis delconstructor en este caso es:DataOutputStream(OutputStream out);
  8. 8.  BufferedInputStream.Las clases orientadas a buferizar los flujos de bytes asignan un buffer dememoria a los streams de I/O. Este buffer le permite a Java realizaroperacioes de I/O sobre más de un byte a la misma vez con lo que estasclases incrementan y optimizan las prestaciones a la hora de trabajar conestos datos de esta forma. Por tanto, esta clase nos permite "envolver"cualquier InputStream en un stream buferizado para optimizar el uso de lamemoria. La sintáxis de los dos constructores que nos ofrece es:BufferedInputStream (InputStream in);BufferedInputStream (InputStream in, int bufSize);La primera opción crea un stream buferizado usando el tamaño por defectodel buffer mientras que la segunda opción usa un bufer del tamaño indicadoen bufSize. Una buena elección de este tamaño sería escoger un múltiploaunque ésto depende de ciertos factores como el sistema operativo sobre elque se ejecute, la cantidad de memoria disponible, etc.Una última observación respecto a las clases orientadas a buferizar datos esque implementan los métodos mark() y reset(), los cuales nos permitenacceder a datos del buffer ya leídos. mark(int limite), como su nombre indicahace una marca en el byte del stream sobre el que estemos situados en esemomento. Con límite indicamos el número de bytes que tienen quetranscurrir antes de dejar de tener efecto la marca que hemos hecho.reset(); al llamar a este método, Java nos "reposiciona" en el byte del streamsobre el que habíamos hecho la marca.  BufferedOutputStream.Esta clase es similar a OutputStream con la diferencia de que incorpora elmétodo flush() con el cual aseguramos que los datos en el buffer de salidason transferidos físicamente al dispositivo de escritura. En este método esprecisamente donde radica la ventaja de esta clase frente a otras destinadasa las escritura, reducir el número de veces que el sistema realmente escribesobre el dispositivo. La diferencia es clara, no es lo mismo escribir byte a byteque enviar un flujo de N bytes (tamaño del buffer) de una tacada aldispositivo. La sintáxis de los constructores es similar al de la clase anterior:BufferedOutputStream (OutputStream in);BufferedOutputStream (OuputStream in, int bufSize);
  9. 9. Las clases orientadas a flujo de caracteres ( Character Stream).Aunque las clases orientadas al flujo de bytes nos proporcionan la suficientefuncionalidad para realizar cualquier tipo de operación de entrada o salida,éstas no pueden trabajar directamente con caracteres Unicode. Es por elloque fue necesario la creación de las clases orientadas al flujo de caracterespara ofrecernos el soporte necesario para el tratamiento de caracteres.Como ya dijimos al principio, estas clases nacen de las clases abstractasReader y Writer.Las clases concretas derivadas de ellas tienen su homónimo en las clasesconcretas derivadas de InputStream y OutputStream, por tanto, laexplicación hecha para todas ellas tiene validez para las orientadas a caractersalvo quizás algunos matices que podrás completar con las especificacionespor lo que omitiremos la explicación detallada de cada una de ellas.No obstante, os daré una relación de las clases más importantes. Son lassiguientes:1. Acceso a fichero: FileReader y FileWriter.2. Acceso a caracter: CharArrayReader y CharArrayWriter.3. Buferización de datos: BufferedReader y BufferedWriter.escribir datos• Leemos e escribimos datos del flujo estándar de entrada/salida:System.out.println(“Hello”);System.in.read();• Hasta ahora, para leer datos, utilizamos el paqueteTextIO:TextIO.getlnChar();
  10. 10. Flujos estándares• Los flujos estándar de entrada y salida siempre están abiertos mientras seejecuta el programa, listos para proporcionar datos (entrada) o para acceptardatos (salida).• Por defecto, el flujo estándar de entrada es el teclado.Referimos al flujo estándar de entrada con System.in• Por defecto, el flujo estándar de salida es la pantalla.Referimos al flujo estándar de salida con System.outint System.in.read()• Lee un código ascii entre 0 y 255 (un byte) y lo pone en un int.System.out.print(“Introduzca caracter: ); char c = (char)System.in.read();System.out.println(“nIntroduciste un: “ + c); ReadCharacter.java• Podemos leer del flujo de entrada estándar tantos caracteres comoqueremos, hasta encontrar eof (End Of File). Al encontrar eof,System.in.read() devuelve -1.• Podemos simular eof dentro de una ventana cmd Windows (dentro deNetbeans, no podemos). Para esto, entramosControl-Z (en una nueva linea):ReadCharacters1.java
  11. 11. Redirigir los flujos estándares• Podemos redirigir los flujos estándares de entrada y salida para leer oescribir a un fichero. Por ejemplo, podemos entrar desde la línea decomandos (cmd):– java ReadCharacters1 < inputReadCharacters.txtSystem.in es el flujo abierto desde el fichero inputReadCharacters.txtCada instrucción System.in.read() lee un carácter de este fichero.ReadCharacters1 lee el contenido de inputReadCharacters.txt, hasta alcanzareof. En este caso, no hace falta Control-Z, eof occurre cuando se alcanza elfinal del fichero!– java ReadCharacters1 > outputReadCharacters.txtSystem.out es el flujo abierto al fichero outputReadCharacters.txtCada instrucción System.out.println escribe a este ficheroSi el fichero existe, el comando lo sobre-escribe (overwrite).– java ReadCharacters1 >> outputReadCharacters.txtLa instrucción >> redirige el flujo estándar de salida, pero sin sobre-escribir elfichero si ya existe– java ReadCharacters1 < inputReadCharacters.txt >outputReadCharacters.txtLee de inputReadCharacters.txt y escribe a outputReadCharacters.txtFlujo (stream)
  12. 12. • Un flujo, o stream, es una conexión entre un programa y una fuente odestino de datos.• Un flujo de entrada maneja los datos que fluyen al programa• Un flujo de salida maneja los datos que fluyen del programa• En la figura, es un trozo de información• Ejemplo de aparatos de IO: conexión a internet, teclado, ratón, pantalla,impresora, disco duro (es I y O, depende de la aplicación).• System.in y System.out son streams creados automaticamente cuando seejecuta un programa Java.Tipo de datos transmitidos por los flujos• Con System.in.read( ), los trozos de información transmitidos del teclado alprograma son de tipo byte.• Problema: ¿Como podemos leer otros datos como int o double, que nocaben en un byte? ¿Como podemos leer caracteres otros que ASCII (e.g.,Unicode)?• Solución: Necesitamos utilizar flujos de caracteres.Nota: Tecnicamente, read() es un método asociado con la variable in, que esuna variable de clase de System. La variable in es de tipo InputStream, quepermite manejar flujos de entrada como bytes.Flujos de bytes vs de caracteres• Existen dos tipos de flujos, flujos de bytes (byte streams) y flujos decaracteres (carácter streams).
  13. 13. • Los flujos de caracteres se usan para manipular datos legibles por humanos(por ejemplo un fichero .txt).• Los flujos de bytes se usan para manipular datos binarios, legibles solo porla maquina (por ejemplo un fichero .exe)Flujos (Streams)import java.io.*;1. Abrir el stream2. Usar el stream (leer, escribir)3. Cerrar el stream¿Cómo leer una línea entera desde el flujo deentrada estándar?• Código completo: SystemIn.java• Se necesitan 3 flujos:– System.in de tipo InputStream lee Bytes desde el flujo de entrada estándar.– InputStreamReader lee Bytes y les descodifica como carácteres.– BufferedReader lee caracteres y les agrupa en líneas.• Flujo de carácteres BufferedReader:Abre un flujo que lee desde un flujo de entrada de caracteres, agrupa loscaracteres a leer en un buffer (una zona de memoria que sirve de tapón
  14. 14. mientras se están transmitiendo los datos) , así permitiendo leer lineasenteras:public String readLine() throws IOException• Creamos un flujo BufferedReader a partir de un flujo de caracteres:public BufferedReader(Reader in)¿Cómo leer números desde el flujo de entradaestándar?• Hacemos como en en SystemIn.java, leemos lineas de String, pero en bucle:– Leer 10 números desde el flujo estándar y sumarlos:SumarDiez.java– Leer N números desde el flujo estándar y sumarlos (Ctrl-Z es eof, que paraString es null):Sumar.java• Convertimos el String a int con: int Integer.parseInt (String cadena)• Antes de convertir la cadena a un entero, tenemos que eliminar la nuevalínea (n). Para eso sirve trim(). Si no, la conversión fracasa y se produce unaexcepción: java.lang.NumberFormatException.Como leer un fichero• Para leer cualquier tipo de datos desde un archivo, procedemos en dosetapas: crear un objeto de tipo FileReader y luego un objeto de tipoBufferedReader.• FileReader: public FileReader(String fileName) throwsFileNotFoundException
  15. 15. Establece un flujo de entrada para leer caracteres desde una fuente externa(fichero). Los métodos read de FileReader solo leen un carácter o un trozo deun array de carácter.• Podemos leer líneas enteras de carácteres abriendo un flujo de tipoBufferedReader a partir de un flujo de tipo FileReader.• Ejemplo: InStream.javaComo escribir a un fichero• FileWriter: public FileWriter(String fileName) throws IOExceptionAbre un flujo de salida para escribir caracteres. Uno de sus métodos write (elde su super-clase Writer), puede imprimir un String: public void write(Stringstr) throws IOException• Ejemplo: OutStream.javachar Unicode, 16 bits
  16. 16. byte, 8 bits.Reader y Writer son las clases bases de la jerarquía para los flujos decaracteres. Para leer o escribir datos binarios tales como imágenes o sonidos,se emplea otra jerarquía de clases cuyas clases base son InputStream yOutputStream.LecturaLas clases Reader e InputStream son similares aunque se refieren a distintostipos de datos, lo mismo ocurre con Writer y OutputSream.Por ejemplo, Reader proporciona tres métodos para leer un carácter char oun array de caracteresint read()int read(char buf[])
  17. 17. int read(char buf[], int offset, int len)InputStream proporciona métodos similares para leer un byte o un array debytes.int read()int read(byte buf[])int read(byte buf[], int offset, int len)La primera versión lee un byte como entero del flujo de entrada, devuelve –1si no hay más datos que leer. La segunda versión, lee un array de bytesdevolviendo el número de bytes leídos. La tercera versión, lee también, unarray de bytes, pero nos permite especificar, la posición de comienzo delarray en la que se empiezan a guardar los bytes, y el máximo número debytes que se van a leer.Dichas clases definen otras funciones miembro que no estudiaremos demomento.EscrituraLa clase Writer proporciona tres métodos para escribir un carácter char o unarray de caracteresint write(int c)int write(char buf[])int write(char buf[], int offset, int len)La clase OutputStream proporciona métodos similaresint write(int c)int write(byte buf[])int write(byte buf[], int offset, int len) Integrantes: Tania Ramos Ovidio Durango

×