当前位置:  开发笔记 > 编程语言 > 正文

无法序列化/反序列化ArrayList

如何解决《无法序列化/反序列化ArrayList》经验,为你挑选了1个好方法。

我正在尝试使用内部对象序列化和反序列化数组列表:

HairBirt param = new HairBirt();
param.setName("name");
param.setValue(2.3f);

HairBirt param2 = new HairBirt();
param2.setName("name2");
param2.setValue(2.4f);

ArrayList list = new ArrayList();

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 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) 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) obj_in.readObject();

我不知道我做错了什么.你能给小费吗?

更新:

已解决: 刚刚使用HairBirt的原生数组而不是ArrayList,它可以工作:

HairBirt[] list = new HairBirt[x];

代替

ArrayList list = new ArrayList();

感谢大家的帮助.



1> Jon Skeet..:

不要使用ByteArrayOutputStream.toString()- 而是使用toByteArray()和base64编码该二进制数据将其转换为字符串而不会丢失信息.

我强烈怀疑这是主要问题 - 您在序列化后丢失了数据.你可能也应该关闭或至少冲洗ObjectOutputStream.我不知道在这种情况下是否实际上做了什么,但这似乎是一个好主意.

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

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有