Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

Dominando BufferedInputStream de Java: Lectura Eficiente de Bytes y Métodos Avanzados

Resumen de la Clase BufferedInputStream de Java

Este tutorial cubre la clase BufferedInputStream de Java, sus métodos clave y ejemplos prácticos para mejorar el rendimiento de I/O de archivos.

La clase BufferedInputStream en el paquete java.io mejora los flujos de entrada a nivel de byte añadiendo un búfer interno, permitiendo lectura de datos más rápida y eficiente.

Extiende la clase abstracta InputStream.

Cómo Funciona BufferedInputStream

BufferedInputStream mantiene un búfer interno de 8,192 bytes por defecto. Cuando se solicita una operación de lectura, se obtiene un bloque de bytes del flujo subyacente (típicamente un archivo) y se almacena en este búfer. Las llamadas de lectura subsiguientes consumen bytes del búfer hasta que se agota, momento en el que se carga otro bloque. Esto reduce el costoso I/O de disco y acelera el consumo de datos.

Crear un BufferedInputStream

Para crear un BufferedInputStream, primero importa la clase:

import java.io.BufferedInputStream;
import java.io.FileInputStream;

Luego, instáncialo envolviendo un flujo de nivel inferior como FileInputStream:

FileInputStream archivo = new FileInputStream("ejemplo.txt");
BufferedInputStream buffer = new BufferedInputStream(archivo);

Opcionalmente, especifica un tamaño de búfer personalizado:

int tamañoBuffer = 16_384; // 16 KB
BufferedInputStream buffer = new BufferedInputStream(archivo, tamañoBuffer);

Cuanto mayor sea el búfer, menos accesos a disco se requieren—útil para archivos grandes o flujos de red.

Métodos Principales de BufferedInputStream

read()

Ejemplo: Leyendo un archivo de texto byte a byte e imprimiéndolo en la consola.

import java.io.BufferedInputStream;
import java.io.FileInputStream;

public class Main {
    public static void main(String[] args) {
        try (BufferedInputStream in = new BufferedInputStream(new FileInputStream("input.txt"))) {
            int byteLeido;
            while ((byteLeido = in.read()) != -1) {
                System.out.print((char) byteLeido);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Salida:

Esta es una línea de texto dentro del archivo.

available()

El método available() informa el número de bytes que se pueden leer del flujo sin bloqueo. Esto puede ayudar a medir el progreso al procesar flujos grandes.

FileInputStream archivo = new FileInputStream("input.txt");
BufferedInputStream buffer = new BufferedInputStream(archivo);
System.out.println("Bytes disponibles: " + buffer.available());
// ... leer datos
System.out.println("Bytes restantes: " + buffer.available());
buffer.close();

skip(long n)

Usa skip() para omitir un número especificado de bytes. Retorna el número real de bytes omitidos, que puede ser menor al solicitado si se alcanza el final del flujo.

buffer.skip(5); // omitir primeros 5 bytes

close()

Siempre cierra el flujo (preferiblemente usando un bloque try-with-resources) para liberar recursos del sistema. Después de cerrar, el flujo no puede reutilizarse.

Otros Métodos Notables

MétodoDescripción
mark(int readLimit)Marca la posición actual en el flujo. Llamadas subsiguientes a reset() retornarán a este punto, siempre que no se hayan leído más de readLimit bytes.
reset()Reposiciona el flujo a la última posición marcada.

Para una referencia completa, consulta la documentación oficial de Java.

Java

  1. Palabra clave final en Java: Variables, métodos y clases
  2. Operador instanceof en Java: Guía completa
  3. Dominando la herencia en Java: Conceptos, tipos y ejemplos prácticos
  4. Entendiendo las clases anidadas estáticas en Java: Uso, diferencias y ejemplos
  5. Dominando las clases internas anónimas en Java: Definición, sintaxis y ejemplos prácticos
  6. Patrón Singleton en Java explicado: Cómo implementarlo y usarlo de forma segura
  7. Dominando la Reflexión en Java: Inspeccionando clases, métodos y campos en tiempo de ejecución
  8. Dominando ObjectOutputStream de Java: Serialización, Métodos y Ejemplos Prácticos
  9. Dominando Java BufferedReader: Manejo Eficiente de Flujos de Caracteres
  10. Dominando Java Generics: Construyendo Código Reutilizable y Type-Safe
  11. Dominando las operaciones de archivos en Java con java.io: creación, lectura, escritura y eliminación