Dic 072013
 
Artículo Java

Durante el desarrollo de una aplicación, es habitual que el programador se encuentra con la necesidad de procesar datos binarios, ya sean datos almacenados en una base de datos, datos leídos de un fichero, o datos recibidos a través de una conexión de red.

Java ofrece numerosas posibilidades para trabajar con este tipo de datos. En este artículo se comentan estas posibilidades y se ofrecen ejemplos de código para los procesamientos que con más frecuencia es necesario realizar sobre datos binarios.

1. Tipos de datos Java para almacenar valores binarios

A diferencia de otros lenguajes de programación como Perl o PHP, en Java cada variable es definida indicando el tipo de datos que puede contener. Entre los tipos de datos disponibles, hay una serie de ellos que resultan especialmente adecuados para almacenar datos binarios:

  • byte: una variable de tipo byte contiene un número entero de 8 bits con signo. El valor mínimo que se puede almacenar en una variable de tipo byte es -128 y el valor máximo es 127.
  • short: Una variable de tipo short contiene un número entero de 16 bits (2 bytes) con signo, y ocupa dos bytes en memoria. Los valores posibles para una variable de tipo short están en el rango -32,768 a 32,767 (inclusive).
  • int: Una variable int contiene un número entero de 32 bits con signo, y ocupa cuatro bytes en memoria, pudiendo almacenar valores entre  -2^31 y (2^31-1).
  • long: Una variable long contiene un numero entero de 64 bits (cuatro bytes) con signo, con valores entre -2^63 y (2^63-1).

En Java, al contrario que en otros lenguajes, no existe el modificador ‘unsigned’ para tipos de datos enteros, por lo que a la hora de procesar los datos mediante operaciones aritméticas, siempre hay que tener en cuenta que las variables enteras contienen valores con signo.

La manera más habitual de trabajar con datos binarios es almacenarlos en un array de bytes. El siguiente ejemplo de codigo crea un array de 256 bytes, y les asigna todos los posibles valores entre 0 y 255:

2. Escribir un fichero binario con FileOutputStream

En Java, para escribir un array de bytes en un fichero binario basta con abrir el fichero mediante la clase FileOutputStream, y utilizar el método write().

Por ejemplo, para escribir el array de bytes que hemos creado en el apartado anterior:

Después, podemos comprobar el contenido del fichero “datos.bin” que se ha generado, abriéndolo con un editor hexadecimal.

En linux podemos también volcar su contenido en pantalla con el comando ‘od’ o ‘xxd’:

si lo que queremos escribir es sólamente parte del array, el método write() tambien admite como argumentos un offset y una longitud:

3. Leer un fichero binario con FileInputStream

La clase FileInputStream permite abrir un fichero que contiene datos binarios para ser leido con el método read(). En su versión más habitual, read() recibe como argumento un array de bytes y lee un número de bytes igual al tamaño del array. El valor devuelto es el número de bytes leídos, o -1 si se ha llegado al fin de fichero.

Por ejemplo, el siguiente código lee el fichero “datos.bin” de cien en cien bytes:

si el fichero “datos.bin” contiene 256 bytes, el resultado escrito en pantalla es:

Referencias

Indice de artículos sobre programación en lenguaje Java

 Publicado por en 11:27 am

 Deja un comentario

(requerido)

(requerido)