12.4 USANDO BUFFERS

 

Muy buenas a todos hemos visto que para acceder a un archivo externo desde un programa Java hemos de crear un Stream, un flujo de datos que establece una comunicación con ese archivo bien sea para leer o para escribir.

La técnica que hemos utilizado en los dos posts anteriores para leer o escribir en un archivo de texto nos valdría ya que es sólo hay una única frase, hay poco contenido, sin embargo, si se trata de un archivo de miles y miles de caracteres esa técnica utilizada es poco eficiente porque cada vez que nosotros queramos escribir o leer en el archivo de texto nuestra aplicación se tendría que repetir millones de veces para leer o escribir cada carácter, esto haría que la aplicación consumiera muchos recursos y se convirtiera en una aplicación lenta.

Para solucionar esto, existen los buffer. Un buffer es una especie de memoria interna que se coloca físicamente entre medias de lo que sería nuestro programa de Java y lo que sería el archivo de texto externo al que queremos acceder. El objetivo que tiene esta memoria intermedia es que en vez de acceder directamente de nuestro código Java al archivo externo lo hagamos mediante esta forma la cual la información contenida en el archivo de texto se vuelca enteramente en el buffer, una vez que está volcado íntegramente en el buffer es nuestro programa Java quien accede al buffer para ir descargando poco a poco esa información.

El buffer lo podemos utilizar tanto para leer como para escribir en un archivo externo.

Para crear un buffer utilizamos la clase BufferedReader la cual tiene un método readLine() en el caso de que queramos leer un archivo de texto. Para el caso que quisiéramos escribir en un archivo de texto utilizaríamos la clase BufferedWriter cuyo método es writerLine().

Para saber más acerca de estas clases se recomienda ir a la API de Java para profundizar un poco más sobre ellas.

Para verlo todo esto en la práctica vamos a utilizar el ejemplo Acceso_Fichero.java en el cual ya hemos trabajado en él en el post Leyendo Ficheros, lo que hacía es leer la información que contenía un archivo de texto que era tan solo una frase:



Si en lugar de una frase tuviéramos 500 o más frases:



Tal y como tenemos el código consumiría muchos recursos además de que la aplicación se haría lenta, para ello creamos un buffer y lo hacemos dentro de la cláusula try después de la clase FileReader y le tenemos que pasar como argumento una instancia de tipo Reader como ya la tenemos creada a la que hemos llamado entrada, le pasamos esta instancia:

            try {

                  FileReader entrada = new FileReader("C:/Users/usuario/Desktop/ejemplo.txt");

                 

                  BufferedReader mibuffer = new BufferedReader(entrada);

A continuación va a ver que modificar y eliminar algunas cosas para dejar el código dentro de la cláusula try de la siguiente forma:

try {

                  FileReader entrada = new FileReader("C:/Users/usuario/Desktop/ejemplo.txt");

                 

                  BufferedReader mibuffer = new BufferedReader(entrada);

                 

                  String linea = "";

                 

                  while(linea!=null) {

                       

                        linea=mibuffer.readLine();

                       

                        System.out.println(linea);

                                              

                  }

Nos creamos una variable de tipo String a la que llamamos línea que va almacenar la información del archivo línea por línea, luego la condición del while mientras que la línea sea diferente a null va a leer el texto y lo imprimirá por consola mediante un System.out.

Probamos, vemos que nos aparece toda la información del archivo de texto en consola:



Si tenéis dudas, sugerencias… podéis comentarlo a través de los comentarios del blog. Saludos!

12.3 ESCRIBIENDO FICHEROS << >> 12.5 LEYENDO ARCHIVOS COMO BYTE




No hay comentarios:

Publicar un comentario