浏览 6028 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-11-01
import java.io.IOException; import java.io.ObjectInputStream; import java.io.Serializable; import java.util.List; import java.util.Map; public class Student implements Serializable { /** * serialVersionUID */ private static final long serialVersionUID = 1L; public List list; public transient Map map; public String a = "hhh"; public Age age; public String b; private Map attributes; /** 就是有由于这个方法导致序列化失败,报java.io.OptionalDataException at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1267) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348) at Student.readObject(Student.java:29)异常 **/ private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { ois.defaultReadObject(); attributes = (Map) ois.readObject();//将它注释掉以后就能通了 } } =========================我是风格符号=================================================================== import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; //序列化代码,就是个深克隆 public class Copy { public static Student deepCopyPageCom(Student pageCom) { Student stu = null; ByteArrayOutputStream baos = null; ObjectOutputStream oos = null; ByteArrayInputStream bais = null; ObjectInputStream ois = null; try { baos = new ByteArrayOutputStream(); oos = new ObjectOutputStream(baos); oos.writeObject(pageCom); bais = new ByteArrayInputStream(baos.toByteArray()); ois = new ObjectInputStream(bais); stu = (Student) ois.readObject(); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } finally { closeAllStream(baos, oos, bais, ois); } return stu; } /** * 关闭所有输入输出流 * * @param baos * @param oos * @param bais * @param ois * @see [类、类#方法、类#成员] */ private static void closeAllStream(ByteArrayOutputStream baos, ObjectOutputStream oos, ByteArrayInputStream bais, ObjectInputStream ois) { if (null != baos) { try { baos.close(); } catch (IOException e) { e.printStackTrace(); } } if (null != oos) { try { oos.close(); } catch (IOException e) { e.printStackTrace(); } } if (null != bais) { try { bais.close(); } catch (IOException e) { e.printStackTrace(); } } if (null != ois) { try { ois.close(); } catch (IOException e) { e.printStackTrace(); } } } } 实在在是很费劲啊,不知是否有人遇到同样的问题,我知道根因 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-11-02
Student的writeObject方法呢?
|
|
返回顶楼 | |
发表时间:2011-11-03
看这段没有格式化的代码更费劲
|
|
返回顶楼 | |
发表时间:2011-11-04
public transient Map map; 去掉transient就可以了
|
|
返回顶楼 | |
发表时间:2011-11-04
楼上的回答是正确的
|
|
返回顶楼 | |
发表时间:2011-11-05
打了个D 写道 public transient Map map; 去掉transient就可以了
+1 transient 含义就是不参与序列化! 没试验过哈! |
|
返回顶楼 | |
发表时间:2011-11-05
7454103 写道 打了个D 写道 public transient Map map; 去掉transient就可以了
+1 transient 含义就是不参与序列化! 没试验过哈! +1,为啥要对map加transient,而后又反序列化呢? |
|
返回顶楼 | |