Archivos Binarios
Archivos Binarios
Archivos Binarios
Introduccin
Si bien los archivos de texto en Java, facilitan la labor en archivos de poco tamao y que no requieran seguridad, el empleo de un archivo binario soluciona estos y otros inconvenientes, al utilizar estos podemos guardar o leer cualquier cosa: int, double, String, boolean, etc.
Para poder utilizar archivos binarios, al igual que cuando vamos a utilizar archivos, es necesario importar la librera java.io.* para que podamos utilizar todas las funciones de leer y escribir.
Archivos Binarios
Los archivos binarios guardan una representacin de los datos en el archivo, es decir, cuando guardamos texto no guardan el texto en si, sino que guardan su representacin en un cdigo llamado UTF-8.
Archivos Binarios
Los dos tipos de objetos que vamos a utilizar para leer de archivos son el DataInputStream y el DataOutputStream.
DataInputStream
El constructor a utilizar para iniciar el DataInputStream es: DataInputStream(new FileInputStream(fileName));
Donde fileName es un String con el nombre del archivo que queremos abrir. Este constructor crea un objeto tipo DataInputStream que podemos utilizar para leer archivos binarios.
DataInputStream
Los mtodos ms tiles de DataInputStream son:
String readUTF() byte readByte() int readInt() long readLong() double readDouble() short readShort() boolean readBoolean()
Estos mtodos sirven para leer los diferentes tipos de datos standar que soporta JAVA.
Ejemplo de Lectura
String fileName = C:\Archivo.dat; Primero declaramos el objeto DataInputStream fileIn = new De tipo DataInputStream DataInputStream(new FileInputStream(fileName));
try {
Iniciamos el DataInputStream con un nuevo FileInputStream con el nombre del archivo.
String unString = fileIn.readUTF(); int unInt = fileIn.readInt(); double unDouble = fileIn.readDouble() } catch (IOException ioe) { }
Siempre que leemos y guardamos en archivos tenemos que ponerlo en un try -> catch.
Estos mtodos nos sirven para leer diferentes tipos de datos del Archivo. Los datos permanecen guardados en las variables y los podemos utilizar despus.
DataOutputStream
El constructor que vamos a utilizar en esta clase para iniciar el DataOutputStream es: DataOutputStream(new FileOutputStream(fileName));
Como se observa el constructor es muy similar al anterior ya que en esencia funciona de la misma manera. Con este nuevo objeto DataOutputStream vamos a poder escribir en archivos binarios.
DataOutputStream
Los mtodos ms tiles de DataOutputStream son:
void writeUTF(String s) void writeByte(byte b) void writeInt(int i) void writeLong(long l) void writeDouble(double d) void writeShort(short s) void writeBoolean(boolean b)
Son muy similares a los de lectura, nicamente que en lugar de devolver datos, los escriben.
Ejemplo de Escritura
String fileName = C:\Archivo.dat;
Primero declaramos el objeto De tipo DataOutputStream
String unString = Hola mundo! Iniciamos el DataOutputStream con un nuevo FileOutputStream con el fileOut.writeUTF(unString); nombre del archivo. // Es lo mismo que fileOut.writeUTF(Hola mundo!) int i = 5; fileOut.writeInt(i); Estos mtodos nos sirven // Es lo mismo que para escribir diferentes tipos de datos al archivo, una vez // fileOut.writeInt(5)
que estn guardados podemos abrir el archivo binario y leerlo con el DataInputStream como ya vimos anteriormente.
11
Subclases de InputStream
FileInputStream: lectura de files byte a byte ObjectInputStream: lectura de files con objetos. FilterInputStream:
BufferedInputStream: lectura con buffer, ms eficiente. DataInputStream: lectura de tipos de datos primitivos (int, double, etc.).
12
Subclases de OutputStream
FileOutputStream: escritura de files byte a byte ObjectOutputStream: escritura de files con objetos. FilterOutputStream:
BufferedOutputStream: escritura con buffer, ms eficiente. DataOutputStream: escritura de tipos de datos primitivos (int, double, etc.).
13
14
Subclases de Reader
InputStreamReader: convierte un stream de bytes en un stream de chars.
FileReader: se asocia a files de chars para leerlos.
15
Subclases de Writer
OutputStreamWriter: convierte un stream de bytes en un stream de chars.
FileWriter: se asocia a files de chars para modificarlos.
BufferedWriter: proporciona salida de caracteres a travs de un buffer (ms eficiencia). PrintWriter: mtodos print() y println() para distintos tipos de datos.
16
17
18
// throws IOException
22
Ejemplo:
// throws IOException FileOutputStream out = new FileOutputStream("theTime.dat"); ObjectOutputStream s = new ObjectOutputStream(out); s.writeObject("Today"); s.writeObject(new Date(1,1,2006)); s.close(); // throws IOException y ClassNotFoundException FileInputStream in = new FileInputStream("theTime.dat"); ObjectInputStream s = new ObjectInputStream(in); String today = (String)s.readObject(); Date date = (Date)s.readObject(); s.close();
24
Las ventajas son multiples, particularmente en el caso de volumenes mayores de datos, el elemento seguridad que se ve incrementado y el tamao del archivo, que permite una mayor tasa de transferencias de datos en el tiempo. Ademas para poder leer diferentes tipos de dato de un archivo de texto hay que hacer casting, y adems es muy difcil saber donde empieza y donde termina cada dato.