Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Ogramar en 22 de Septiembre 2015, 09:45

Título: Java diferencia entre InputStream y BufferedInputStream método read
Publicado por: Ogramar en 22 de Septiembre 2015, 09:45
Hola

InputStream es una clase abstracta public abstract class InputStream con un método read() previsto para leer un byte de a cada vez desde un fichero

BufferedInputStream no es abstracta, es una clase concreta, por tanto puedes crear instancias de esta clase. Su método read devuelve un byte de a cada vez pero mantiene un buffer donde va acumulando los bytes internamente.

La clave en las clases que comienzan con Buffered es que usan un buffer, digamos que una memoria interna que normalmente hace que esas clases sean más eficientes, es decir, es esperable que BufferedInputStream sea más rápida que las otras implementaciones de InputStream. La idea sería: un InputStream normal tiene que estar llamando y accediendo al sistema operativo para cada byte que quiera devolver y esto consume cpu y es ineficiente. En cambio un BufferedInputStream llama al sistema operativo una vez y recolecta un array de bytes. Cuando se le pide read() ya no tiene que acceder al sistema operativo, sino que devuelve la información de su buffer interno. En algún momento el buffer interno se agota, pero mientras esto ocurre se han ahorrado un montón de procesos.

Salu2
Título: Re:Java diferencia entre InputStream y BufferedInputStream método read
Publicado por: Lorenzo31 en 22 de Septiembre 2015, 10:01
Así la función read(), lee byte a byte de forma que se puede hacer algun tipo de bucle.

Buffered guarda en memoria, ok interesante aporte, ya distingo algo más cuando vea Buffered en alguna clase.

Gracias Ogramar.