Download Resumen_Clase_4
Document related concepts
no text concepts found
Transcript
Prof. Gueorgi Khatchatourov
UEA: LABORATORIO DE PROGRAMACION ORIENTADA A OBJETOS
Resumen de Clase #4
(1151072)
Fecha: 23/09/14
Continuación del tema "Serialización/Deserialización"
1. Comentarios adicionales a la serialización "manual":
a. El archivo principal publicado en el resumen anterior deben considerar como la
especificación para desarrollo de clases cuyos objetos se usan en este archivo.
b. En este código contenido del objeto de "superclase" se guarda en un objeto de
clase "…Stream".
Como una consecuencia, eso significa que la información almacenada es un "flujo
de bytes". Entonces, cada campo de tipo entero, doble, o una String (cadena de
literales) debe ser transformado a secuencia de bytes para la serialización.
Viceversa: durante la deserialización, los bytes separados del flujo de entrada
deben ser re-estructurizados a los tipos correspondientes.
Desde este punto de vista, en la clase nuevamente fue analizado el código
desarrollado por profesor para esta tarea (no se publica aquí)
2. Serialización automática. A continuación se presenta el código de una implementación de
profesor para serialización automática. El objetivo y la lógica de
serialización/deserialización coincide con la versión manual. (El prototipo de este código,
las clases involucrados y paquetes importados se presentan, por ejemplo, en el Capitulo
16 de la edición 2 del "Big Java" de Horstmann.). Considere este código como una
especificación para implementar todas clases y serializar/deserializar las
automáticamente.
import
import
import
import
import
import
import
java.util.Scanner;
java.io.File;
java.io.IOException;
java.io.FileOutputStream;
java.io.FileInputStream;
java.io.ObjectOutputStream;
java.io.ObjectInputStream;
public class Ch16_serial_standard {
/**
* @param args the command line arguments
*/
public static void main(String[] args)
throws IOException, ClassNotFoundException
{
// TODO code application logic here
Scanner in = new Scanner(System.in);
System.out.print("type 'c' to creat and serialize 'd' to deserialize and print ");
String todo = in.next();
object_to_serialize obj= new object_to_serialize();
switch (todo){
case "c":
//
create, print and then serialize 'obj'
{
obj.field1.gen(1);
obj.field2.gen("my 1st subfield of filed2", 5.55);
obj.field1.out();
obj.field2.out();
System.out.print("type filename to serialize ");
String out_ser_File = in.next();
try{
File f=new File(out_ser_File);
ObjectOutputStream out= new ObjectOutputStream(
new FileOutputStream(f));
out.writeObject(obj);
out.close();
}
catch (IOException exception)
{
System.out.println("Error processing serialize: " + exception);
}
break;
}
case "d":
//
else if(todo.equals("d"))
{
System.out.print("type filename to deserialize it ");
String in_deser_File = in.next();
try{
File f=new File(in_deser_File);
ObjectInputStream inf= new ObjectInputStream(
new FileInputStream(f));
obj= (object_to_serialize)inf.readObject();
inf.close();
obj.field1.out();
obj.field2.out();
}
catch (IOException exception)
{
System.out.println("Error processing serialize: " + exception);
}
break;
}
default: //
else
{
System.out.println("Incorrect 'todo' option");
}
}
}
}
Related documents