Ich versuche, innerhalb einer Array-Liste mit einem Objekt zu serialisieren und deserialisieren:kann nicht serialisiert/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();
}
Die HairList Objekt ist auch ein serialisierbares Objekt.
Diese Codeausführung kehrt den folgenden Fehler:
java.io.InvalidClassException: java.util.ArrayList; local class incompatible: stream classdesc serialVersionUID = 8664875232659988799, local class serialVersionUID = 8683452581122892189
in Linie paramDecoded = (ArrayList<HairBirt>) obj_in.readObject();
Ich weiß nicht, was ich falsch mache. Kannst du einen Tipp geben?
Update:
Entschlossen: verwendet nur eine native Array von HairBirt statt einer Arraylist und es funktioniert:
HairBirt[] list = new HairBirt[x];
statt
ArrayList<HairBirt> list = new ArrayList<HairBirt>();
Vielen Dank für Eure Hilfe.
Yup, das ist das Problem, aber ich brauche wirklich String in diesem Zug ... Das ist nicht das eigentliche Problem, es ist eine Vereinfachung davon. – sakana
Was meinst du mit 'in diesem Zug'? Sie * müssen * das BAOS verlustfrei in einen String konvertieren, wenn Sie es deserialisieren wollen. Ob das mit Base64 ist oder nicht, ist eine andere Sache, aber ich denke, es ist ein guter Weg, es zu tun. –
@sakana: base64 ist ein Zeichenfolgenformat mit einem begrenzten Zeichensatz. – Powerlord