Con algunas
limitaciones, los objetos se pueden leer y escribir en flujos de forma similar
a los tipos primitivos. Concretamente, las clases ObjectInputStream y ObjectOutputStream poseen las mismas funcionalidades que DataInputStream y DataOutputStream (y otras específicas de objetos), lo cual da lugar a
que un flujo de objetos pueda contener tanto tipos primitivos como objetos.
Los métodos que
más interés tienen son
Object readObject()
void writeObject(Object obj)
que leen/escriben
el próximo objeto presente en el flujo.
Ejemplo de uso:
package
flujosdeobjetos;
import
java.io.*;
import
java.math.BigDecimal;
import
java.util.Calendar;
import
java.util.Locale;
import
java.util.TimeZone;
public class
FlujosDeObjetos {
static final String archivoDeDatos =
"datosDeFacturacion.bin";
static final BigDecimal[] precio_unitario =
{
new BigDecimal("19.99"),
new BigDecimal("9.99"),
new BigDecimal("15.99"),
new BigDecimal("3.99"),
new
BigDecimal("4.99")};
static final int[] num_unidades =
{12, 8, 13, 29, 50};
static final String[] descripciones =
{"memoria usb",
"tarjeta sd",
"teclado",
"disco usb",
"disco duro"};
public static void main(String[]
args)
throws IOException,
ClassNotFoundException {
TimeZone tz =
TimeZone.getTimeZone("Europe/Madrid");
Locale loc = new
Locale("ES");
Calendar cal =
Calendar.getInstance(tz, loc);
ObjectOutputStream f_sal =
null;
try {
f_sal = new
ObjectOutputStream(new BufferedOutputStream(new
FileOutputStream(archivoDeDatos)));
f_sal.writeObject(cal);
for (int i = 0; i <
precio_unitario.length; i++) {
f_sal.writeObject(precio_unitario[i]);
f_sal.writeInt(num_unidades[i]);
f_sal.writeUTF(descripciones[i]);
}
} finally {
f_sal.close();
}
ObjectInputStream f_ent =
null;
try {
f_ent = new
ObjectInputStream(new BufferedInputStream(new
FileInputStream(archivoDeDatos)));
Calendar fecha =
null;
BigDecimal precio;
int unidades;
String descripcion;
BigDecimal total = new BigDecimal(0);
fecha = (Calendar)
f_ent.readObject();
System.out.format("Hoy es %tA,
%<te de %<tB de %<tY:%n%n", fecha);
try {
while (true) {
precio =
(BigDecimal) f_ent.readObject();
unidades =
f_ent.readInt();
descripcion =
f_ent.readUTF();
total =
total.add(precio.multiply(new BigDecimal(unidades)));
}
} catch (EOFException e)
{
}
System.out.format("%nImporte
total: %.2f€%n", total);
} finally {
f_ent.close();
}
}
}
No hay comentarios:
Publicar un comentario