Saltar la navegación

5.2. Flujo basado en bytes

Para el tratamiento de los flujos de bytes, hemos dicho que Java tiene dos clases abstractas que son InputStream y OutputStream.

Los archivos binarios guardan una representación de los datos en el archivo, es decir, cuando guardamos texto no guardan el texto en si, sino que guardan su representación en un código llamado UTF-8.

Las clases principales que heredan de OutputStream, para la escritura de ficheros binarios son:

  • FileOutputStream: escribe bytes en un fichero. Si el archivo existe, cuando vayamos a escribir sobre él, se borrará. Por tanto, si queremos añadir los datos al final de éste, habrá que usar el constructor FileOutputStream(String filePath, boolean append), poniendo append a true.
  • ObjectOutputStream: convierte objetos y variables en vectores de bytes que pueden ser escritos en un OutputStream.
  • DataOutputStream, que da formato a los tipos primitivos y objetos String, convirtiéndolos en un flujo de forma que cualquier DataInputStream, de cualquier máquina, los pueda leer. Todos los métodos empiezan por "write", como writeByte(), writefloat(), etc.

De InputStream, para lectura de ficheros binarios, destacamos:

  • FileInputStream: lee bytes de un fichero.
  • ObjectInputStream: convierte en objetos y variables los vectores de bytes leídos de un InputStream.

Ejemplos

En el siguiente ejemplo puedes ver cómo se crea un flujo de salida y otro de entrada a un archivo binario mediante las clase FileInputStream y FileOutputStream:

EscribirFichBytes.java

En los siguientes ejemplos se puede ver cómo se escribe y se lee un archivo binario con DataOutputStream y DataInputStream

EscribirFichData.java

LeerFichData.java

Importante

Java codifica el texto en memoria en UTF-16, en variables de tipo String o char[]. Sin embargo, la mayoría de los ficheros de texto están codificados en UTF-8 y Java lo respeta leyendo y escribiendo en esta codificación.

Por tanto, hay que tener en cuenta que, las operaciones de lectura y escritura de texto con ficheros de texto, generalmente llevan un proceso de recodificación.