Leer y escribir secuencias binarias es una de las tareas de E / S más comunes que puede realizar una aplicación Java. Se puede realizar observando cada byte individual en una secuencia o utilizando un enfoque amortiguado más estructurado.
Nota: Este artículo analiza la lectura de datos binarios de un
ejemplo.jpgarchivo. Si prueba este código, simplemente reemplace el nombre del
ejemplo.jpgcon la ruta y el nombre de un archivo jpeg en tu computadora.
los
java.ioLa clase fue la primera API de Java en proporcionar funcionalidad de entrada / salida. Tiene dos métodos que pueden usarse para ingresar y emitir flujos de bytes (bloques de 8 bits) desde y hacia un archivo. Estas clases son las
FileInputStreamy
FileOutputStream. Estos métodos proporcionan un método básico de E / S al permitir que un archivo ingrese o salga un byte a la vez. En la práctica, es mejor usar un método con búfer para flujos binarios, pero es bueno observar el bloque de construcción más básico de la funcionalidad de E / S de Java.
Observe cómo colocamos el manejo de E / S dentro de un
intenta, atrapa, finalmentebloquear: esto es para asegurarnos de que manejamos las excepciones de E / S y para cerrar correctamente las transmisiones. El bloque catch mostrará cualquier excepción de E / S que ocurra e imprimirá un mensaje para el usuario. En el último bloque, es importante cerrar las transmisiones explícitamente llamando al método de cierre; de lo contrario, permanecerán abiertas y un desperdicio de recursos. Hay un control para ver si el
FileInputStreamy
FileOutputStreamson nulos antes de intentar cerrar. Esto se debe a que podría producirse un error de E / S antes de que se inicialicen las secuencias. Por ejemplo, si el nombre del archivo es incorrecto, la secuencia no se abrirá correctamente.
tratarbloque podemos agregar código para leer en los bytes:
leerEl método lee en un byte del
FileInputStreamy el método de escritura escribe un byte en el
FileOutputStream. Cuando se alcanza el final del archivo y no hay más bytes para ingresar, se devuelve el valor de -1.
Ahora que se ha lanzado Java 7, puede ver el beneficio de una de sus nuevas características: el bloque try with resources. Esto significa que si identificamos las secuencias del bloque try al principio, se encargará de cerrar la secuencia por nosotros. Esto elimina la necesidad del bloque finalmente en el ejemplo anterior:
Los listados completos de código Java para las dos versiones del programa de lectura de bytes se pueden encontrar en Código de ejemplo de flujo binario.