无法序列化/反序列化ArrayList

我试图反序列化" title="序列化和反序列化">序列化和反序列化内部对象的数组列表:

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();

}

HairList对象也是一个可序列化的对象。

此代码执行返回以下错误:

java.io.InvalidClassException: java.util.ArrayList; local class

incompatible: stream classdesc serialVersionUID = 8664875232659988799, local

class serialVersionUID = 8683452581122892189

排队 paramDecoded = (ArrayList<HairBirt>) obj_in.readObject();

我不知道我在做什么错。你能给个小费吗?

更新:

仅使用HairBirt的本机数组而不是ArrayList即可工作:

HairBirt[] list = new HairBirt[x];

代替

ArrayList<HairBirt> list = new ArrayList<HairBirt>();

感谢大家的帮助。

回答:

不要使用ByteArrayOutputStream.toString()-而是使用toByteArray()二进制数据并对它进行base64编码,以将其转换为字符串而不会丢失信息。

我强烈怀疑这是主要问题-

序列化后您丢失了数据。您可能还应该关闭或至少冲洗它ObjectOutputStream。在这种情况下,我不知道该怎么做,但这似乎是个好主意。

我不相信直接在Java中有任何base64支持(无论如何是在公共类中),但是可以使用各种第三方库,例如Apache Commons

Codec库中的第三方库。

以上是 无法序列化/反序列化ArrayList 的全部内容, 来源链接: utcz.com/qa/399624.html

回到顶部