5. Ficheros binarios
Los ficheros binarios no son legibles directamente por humanos (.exe, .jpg, .mp3, .dat). En ellos los datos pueden estar no estructurados o estructurados.
5.1. Ficheros binarios no estructurados
En los ficheros binarios no estructurados los datos se escriben “tal cual” en bytes, sin un formato estructurado definido por un estándar. El programa que los lee necesita saber cómo interpretar esos bytes.
Métodos de Ficheros Binarios No Estructurados
| Método | Descripción |
|---|---|
Files.readAllBytes(Path), Files.write(Path, ByteArray) |
Lee y escribe bytes puros. |
Files.newInputStream(Path), Files.newOutputStream(Path) |
Flujo de bytes directo. |
Ejemplo binario no estructurado
Escribir bit a bit los datos 1 2 3 4 5 en un fichero llamado datos.bin.
🔍 Ejecutar y Analizar
Ejecuta el ejemplo anterior y comprueba que la salida es la siguiente:
5.2. Ficheros binarios estructurados
En los ficheros binarios estructurados los datos se guardan de forma estructurada siguiendo una organización predefinida, con campos y tipos de datos, a veces con un formato estándar (ej. PNG, ZIP, MP3, etc.) que pueden incluir cabeceras (con información como versión, tamaño, etc.) y registros (con campos fijos o delimitadores). El orden de bytes y los tamaños están definidos, lo que permite a cualquier programa que conozca el formato leerlo correctamente. Las clases DataOutputStream y DataInputStream de java.io sirven para leer y escribir ficheros binarios estructurados.
Métodos de DataOutputStream
| Método | Descripción |
|---|---|
writeInt(int) |
Escribe un entero con signo. Entero (4 bytes). |
writeDouble(double) |
Escribe un número en coma flotante. Decimal (8 bytes). |
writeFloat(float) |
Escribe un número float. Decimal (4 bytes). |
writeLong(long) |
Escribe un long. Entero largo (8 bytes). |
writeBoolean(boolean) |
Escribe un valor verdadero/falso. Booleano (1 byte). |
writeChar(char) |
Escribe un carácter Unicode. Carácter (2 bytes). |
writeUTF(String) |
Escribe una cadena precedida por su longitud en 2 bytes. Cadena UTF-8. |
writeByte(int) |
Escribe un solo byte. Byte (1 byte). |
writeShort(int) |
Escribe un short. Entero corto (2 bytes). |
Métodos de DataInputStream
| Método | Descripción |
|---|---|
readInt() |
Lee un entero con signo (Entero). |
readDouble() |
Lee un número double (Decimal). |
readFloat() |
Lee un número float (Decimal). |
readLong() |
Lee un long (Entero largo). |
readBoolean() |
Lee un valor verdadero/falso (Booleano). |
readChar() |
Lee un carácter Unicode (Carácter). |
readUTF() |
Lee una cadena UTF-8 (Cadena UTF-8). |
readByte() |
Lee un byte (Byte). |
readShort() |
Lee un short (Entero corto). |
Ejemplo
Lectura y escritura en ficheros binarios estructurados (con tipos primitivos):
🔍 Ejecutar y Analizar
Ejecuta el ejemplo anterior y comprueba que la salida es la siguiente: