estoy tratando de serializar y deserializar un lista de arreglo con un objeto en el interior:no puede serializar/Deserialize ArrayList
HairBirt param = new HairBirt();
param.setName("name");
param.setValue(2.3f);
HairBirt param2 = new HairBirt();
param2.setName("name2");
param2.setValue(2.4f);
ArrayList<HairBirt> list = new ArrayList<HairBirt>();
list.add(param);
list.add(param2);
ByteArrayOutputStream bos = null;
try {
bos = new ByteArrayOutputStream();
ObjectOutputStream obj_out = new ObjectOutputStream(bos);
obj_out.writeObject(list);
} catch (IOException e) {
e.printStackTrace();
}
String encoded = bos.toString();
try {
encoded = URLEncoder.encode(encoded, "UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
System.out.print("The serialized output is: " + encoded);
//DECODE
ArrayList<HairBirt> paramDecoded;
String myParam = null;
try {
myParam = URLDecoder.decode(encoded, "UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
System.out.println("Got parameters");
ByteArrayInputStream bis = new ByteArrayInputStream(myParam.getBytes());
try {
ObjectInputStream obj_in = new ObjectInputStream(bis);
paramDecoded = (ArrayList<HairBirt>) obj_in.readObject();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
objeto La HairList es también un objeto serializable.
ejecución Este código está devolviendo el siguiente error:
java.io.InvalidClassException: java.util.ArrayList; local class incompatible: stream classdesc serialVersionUID = 8664875232659988799, local class serialVersionUID = 8683452581122892189
en línea paramDecoded = (ArrayList<HairBirt>) obj_in.readObject();
No sé lo que estoy haciendo mal. ¿Puedes dar un consejo?
Actualización:
resolvió: acaba de utilizar una matriz natural de HairBirt en lugar de un ArrayList y funciona:
HairBirt[] list = new HairBirt[x];
en lugar de
ArrayList<HairBirt> list = new ArrayList<HairBirt>();
Gracias a todos por tu ayuda.
Sí, ese es el problema, pero realmente necesito usar String en ese movimiento ... Este no es el problema real, es una simplificación. – sakana
¿Qué quiere decir con 'en ese movimiento'? Deberá * tener * para convertir el BAOS en una cadena de una manera sin pérdida si desea poder deserializarlo. Si eso es con base64 o no es una cuestión diferente, pero creo que es una buena manera de hacerlo. –
@sakana: base64 es un formato de cadena con un juego de caracteres limitado. – Powerlord