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 constructorFileOutputStream(String filePath, boolean append)
, poniendoappend
atrue
.ObjectOutputStream
: convierte objetos y variables en vectores de bytes que pueden ser escritos en unOutputStream
.DataOutputStream
, que da formato a los tipos primitivos y objetosString
, convirtiéndolos en un flujo de forma que cualquierDataInputStream
, de cualquier máquina, los pueda leer. Todos los métodos empiezan por "write
", comowriteByte()
,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.
La escritura de un fichero Binario se hace como se muestra en el siguiente documento.
Ejemplo: escritura a fichero.
En el siguiente ejemplo se puede ver cómo se escribe a un archivo binario con DataOutputStream
:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class CopiaFicheros {
public static void main(String args[]) {
// Copiar ficheros
File origen = new File("origen.txt");
File destino = new File("destino.txt");
try {
InputStream in = new FileInputStream(origen);
OutputStream out = new FileOutputStream(destino);
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
Formato de codificación de caracteres Unicode e ISO 10646 que utiliza símbolos de longitud variable.