private static final long serialVersionUID = -1361890418743713893L;
Donde -1361890418743713893L será la versión de la clase compilada y hará que nuestro código no de excepción, aquellos atributos nuevos que no posea la clase serializada se inicializarán a los valores por defecto.
El código de ejemplo es igual de simple, utiliza Commons Codec versión 1.7 y Commons Lang 2.4
import java.io.IOException;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.SerializationUtils;
public class Main {
public static void main(String args[]) throws IOException {
// Instanciar el objeto que vamos a usar.
ConsultaForm m = new ConsultaForm(1, "javi", "montesinos");
m.getCursos().add(1);
m.getCursos().add(222);
// Pasar Java a un JSON como array de Bytes para codificar en base 64
byte[] u = SerializationUtils.serialize(m);
// Codificar json en bytes a una cadena base64
String s = Base64.encodeBase64String(u);
// Guardar el objeto en un campo de la base de datos.
System.out
.println("Guadar formulario de consulta en la base de datos : "
+ s);
// Recuperar objeto en base 64 de la base de datos y decodificar a un
// array de bytes
String savedSearchValue = "rO0ABXNyAAxDb25zdWx0YUZvcm0AAAAAAAAAAQIABEkAAmlkTAAJYXBlbGx" +
"pZG9zdAASTGphdmEvbGFuZy9TdHJpbmc7TAAGY3Vyc29zdAAQTGphdmEvdXRpbC9MaXN0O0wABm5vbW" +
"JyZXEAfgABeHAAAAABdAAKbW9udGVzaW5vc3NyABNqYXZhLnV0aWwuQXJyYXlMaXN0eIHSHZnHYZ0DA" +
"AFJAARzaXpleHAAAAACdwQAAAAKc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1" +
"ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAAFzcQB+AAcAAADeeHQABGphdmk=";
byte[] dataDos = Base64.decodeBase64(savedSearchValue);
// Mapear el array de bytes a un objeto SavedSearch
Object o = SerializationUtils.deserialize(dataDos);
if (o instanceof ConsultaForm) {
System.out.println(o.toString());
} else {
System.out.println("Noooooooooooooooop !");
}
}
}
Fuente: http://stackoverflow.com/questions/3678136/managing-serveral-versions-of-serialized-java-objects
ResponderEliminar