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