Java tiene dos tipos de clases para entrada y salida (E / S): flujos y lectores / escritores .
(Corrientes InputStream
, OutputStream
y todo lo que se extiende estos) son para la lectura y escritura de datos binarios de los archivos, la red, o cualquier otro dispositivo.
Los lectores y escritores son para leer y escribir texto (caracteres). Son una capa encima de los flujos, que convierte datos binarios (bytes) en caracteres y viceversa, utilizando una codificación de caracteres .
Leer datos del disco byte a byte es muy ineficaz. Una forma de acelerarlo es usar un búfer: en lugar de leer un byte a la vez, lee algunos miles de bytes a la vez y los coloca en un búfer, en la memoria. Luego puede mirar los bytes en el búfer uno por uno.
El tutorial de Java de Oracle sobre E / S lo explica en detalle.
Mirando la línea de código que proporcionó:
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.in
es un InputStream
. Creas un InputStreamReader
que lee bytes desde System.in
. Luego envuelve eso en un BufferedReader
.
Entonces, al final, tienes un BufferedReader
que lee de un InputStreamReader
que lee System.in
.
InputStreamReader
es un envoltorio alrededor de unInputStream
que le permite leer texto de unInputStream
. Si solo desea leer bytes (no caracteres), no es necesarioInputStreamReader
. Es útil si desea interpretar los bytes como caracteres de texto.Buffer:
Es una región de un almacenamiento de memoria física que se utiliza para almacenar datos temporalmente mientras se mueven de un lugar a otro. Ese almacenamiento de memoria física sería RAM (memoria de acceso aleatorio) en la mayoría de los casos.
Pero desde el contexto de esta pregunta, Buffer se usa al leer / escribir datos. No es necesario utilizarlo al mover datos de un lugar a otro.
Ejemplo de búfer: si su sistema tiene 4 GB de RAM, el sistema podría asignar 4 KB de memoria (RAM) para búfer . KB - Kilobyte (s), GB - Gigabyte (s)
Secuencia de E / S (o) Secuencia:
E / S significa Entrada / Salida.
Por lo tanto, Input Stream puede ser una fuente de entrada como un archivo de disco, una conexión de red, etc.
Y Output Stream puede ser un destino de salida como un archivo de disco, una conexión de red, etc.
Según la documentación oficial de JAVA , los Streams son de 3 tipos.
Secuencias de bytes:
Las clases de flujo de entrada de bytes obtienen la entrada como bytes sin procesar . Las clases de flujo de salida de bytes dan salida como bytes sin procesar .
InputStream
- Subclases conocidas directasOutputStream
- Subclases conocidas directasFlujos de caracteres: son una capa sobre los flujos de bytes. Convierten bytes (datos binarios) en caracteres y caracteres en bytes, utilizando una codificación de caracteres.
Reader
- Subclases conocidas directasWriter
- Subclases conocidas directasLos flujos de bytes y los flujos de caracteres utilizan E / S sin búfer .
Secuencias almacenadas en búfer:
Un programa puede convertir una secuencia sin búfer en una secuencia con búfer usando el lenguaje de envoltura, donde el objeto de la secuencia sin búfer se pasa al constructor para una clase de secuencia con búfer .
Ejemplo:
inputStream = new BufferedReader(new FileReader("xanadu.txt")); outputStream = new BufferedWriter(new FileWriter("characteroutput.txt"));
Hay 4 clases de secuencias almacenadas en búfer que se utilizan para envolver secuencias sin búfer:
Para crear secuencias de bytes almacenadas en búfer , utilice
BufferedInputStream
yBufferedOutputStream
clases.Para crear flujos de caracteres en búfer , utilice y clases.
BufferedReader
BufferedWriter
fuente
Bueno, es una pregunta en la mente de todos los que comienzan a trabajar en el paquete java.io. Para responder a sus preguntas, los términos InputStreamReader y BufferedReader representan solo los objetos java (no hay nada especial en ellos), pero se crean para operaciones io como leer y escribir desde / hacia diferentes entradas / salidas como archivo, objeto, etc.
Ahora vamos a la fila
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
InputStreamReader es la clase para leer el flujo de entrada de bytes, pero leer cada byte es una operación costosa, por lo que lo estamos envolviendo en BufferedReader para almacenarlo en búfer (que es el patrón del decorador)
Entonces, lo que sucederá es que incluso antes de comenzar a leer, bufferReader almacenará una parte de los bytes en el registro y cuando realice la operación de lectura. se leerá desde esa ubicación, que es mucho menos costosa que leer desde la consola / archivo. Pero en el caso de InputStreamReader, cuando realiza la operación de lectura cada vez que se realiza la operación de acceso al disco
fuente
Un flujo es la conexión y la información real que se pasa entre puntos. El búfer es un contenedor de almacenamiento que almacena parte o la totalidad de los datos transmitidos y los alimenta al dispositivo de salida.
Por supuesto, el punto es que si la transmisión se ralentiza más allá de la velocidad de datos requerida para mostrar los datos, la salida se detendrá. El búfer evita esto.
fuente
stream
paquetes. Luego, la computadora remota almacena cada paquete en un búfer. La computadora remota lee los datos de su búfer y crea, digamos, un video de esto. ¡Espero que esto ayude!Un búfer es una parte de la memoria que se utiliza para almacenar un flujo de datos de dispositivos periféricos. Luego, desde este búfer, este flujo de datos se recopila y almacena en variables. Una secuencia se puede definir como un flujo continuo de datos.
El mismo término "entrada / salida" no significa más que mover datos dentro y fuera de los búferes. Solo ten esto en tu mente todo el tiempo. Los procesos realizan E / S solicitando al sistema operativo que los datos se vacíen de un búfer (operación de escritura) o que se llene un búfer con datos (operación de lectura).
Diagrama lógico de cómo se mueven los datos
En términos simples, imagine que cuando escribe datos en un teclado, los datos se mueven a través de una tubería (el flujo ) al búfer y luego del búfer al disco (operación de escritura). De manera similar, cuando los datos se mueven del disco al búfer y del búfer a su consola, entonces es operación de lectura.
Puede leer los enlaces para una mejor comprensión. ¡Espero eso ayude!.
¿Qué es el búfer en Java?
Ingrese la descripción del enlace aquí
fuente