Java ByteArrayInputStream: Guía Práctica para Leer Arrays de Bytes
Java ByteArrayInputStream
Este artículo explica cómo usar ByteArrayInputStream de Java para leer datos de arrays de bytes, cubriendo constructores, métodos clave y ejemplos prácticos.
¿Qué es ByteArrayInputStream?
La clase ByteArrayInputStream, parte del paquete java.io, implementa InputStream y te permite tratar un array de bytes como un flujo de entrada. Internamente almacena una copia del array suministrado, permitiendo acceso aleatorio y lectura eficiente.
Nota: El flujo lee del array mismo, no de una fuente externa, por lo que todas las operaciones son basadas en memoria.
Crear un ByteArrayInputStream
Importa java.io.ByteArrayInputStream e instáncialo. Puedes leer todo el array o una porción.
ByteArrayInputStream entrada = new ByteArrayInputStream(byte[] arr);
ByteArrayInputStream entrada = new ByteArrayInputStream(byte[] arr, int inicio, int longitud);
El segundo constructor lee longitud bytes comenzando en el índice inicio.
Métodos Principales
read()
int read()– lee el siguiente byte, o-1si se alcanza el final.int read(byte[] b)– llena el array suministrado con datos.int read(byte[] b, int off, int len)– lee hastalenbytes enbcomenzando en el offsetoff.
Ejemplo: Leyendo Bytes
import java.io.ByteArrayInputStream;
public class Main {
public static void main(String[] args) {
byte[] array = {1, 2, 3, 4};
try (ByteArrayInputStream entrada = new ByteArrayInputStream(array)) {
System.out.print("Bytes leídos: ");
int valor;
while ((valor = entrada.read()) != -1) {
System.out.print(valor + ", ");
}
System.out.println();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Salida
Bytes leídos: 1, 2, 3, 4,
available()
Retorna el número de bytes aún disponibles sin bloqueo.
import java.io.ByteArrayInputStream;
public class Main {
public static void main(String[] args) {
byte[] array = {1, 2, 3, 4};
try (ByteArrayInputStream entrada = new ByteArrayInputStream(array)) {
System.out.println("Inicialmente: " + entrada.available());
entrada.read();
entrada.read();
System.out.println("Después de 2 lecturas: " + entrada.available());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Salida
Inicialmente: 4 Después de 2 lecturas: 2
skip()
Avanza la posición del flujo por el número solicitado de bytes.
import java.io.ByteArrayInputStream;
public class Main {
public static void main(String[] args) {
byte[] array = {1, 2, 3, 4};
try (ByteArrayInputStream entrada = new ByteArrayInputStream(array)) {
entrada.skip(2);
System.out.print("Después de skip: ");
int valor;
while ((valor = entrada.read()) != -1) {
System.out.print(valor + ", ");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Salida
Después de skip: 3, 4,
close()
Cerrar un ByteArrayInputStream es una operación sin efecto; el flujo aún puede usarse después. El método está presente solo para compatibilidad de API.
Otros Métodos Útiles
| Método | Descripción |
|---|---|
mark(int readlimit) | Marca la posición actual. |
reset() | Retorna a la última posición marcada. |
markSupported() | Siempre retorna true. |
finalize() | Asegura que los recursos se liberen (sin efecto para esta clase). |
Para la API completa, consulta la documentación oficial de Java.
Java
- Técnicas de Copia de Arrays en Java: Guía Completa
- Palabra clave final en Java: Variables, métodos y clases
- Operador instanceof en Java: Guía completa
- Entendiendo las clases anidadas estáticas en Java: Uso, diferencias y ejemplos
- Dominando las clases internas anónimas en Java: Definición, sintaxis y ejemplos prácticos
- Patrón Singleton en Java explicado: Cómo implementarlo y usarlo de forma segura
- Dominando la Reflexión en Java: Inspeccionando clases, métodos y campos en tiempo de ejecución
- Dominando ObjectOutputStream de Java: Serialización, Métodos y Ejemplos Prácticos
- Dominando Java Scanner: Guía Completa con Ejemplos Prácticos
- Dominando Java Generics: Construyendo Código Reutilizable y Type-Safe
- Dominando las operaciones de archivos en Java con java.io: creación, lectura, escritura y eliminación