【发布时间】:2014-09-09 12:06:50
【问题描述】:
我有一门课
class Stundent
{
private static final long serialVersionUID = 1L;
private int no;
private String name;
//setters and getters
}
然后我使用以下代码进行序列化和反序列化
public class Serialization{
public static void main(String args[]) throws Exception {
File file = new File("out.ser");
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fos);
SerializeMe serializeMe = new SerializeMe(1);
oos.writeObject(serializeMe);
oos.close();
}
}
public class DeSerialization{
public static void main(String args[]) throws Exception {
File file = new File("out.ser");
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
SerializeMe dto = (SerializeMe) ois.readObject();
System.out.println("data : " + dto.getData());
ois.close();
}
}
运行序列化类后,我将 serialiversionID 更改为 2,然后我运行第二个程序,然后我得到了
java.io.InvalidClassException:
SerializeMe; local class incompatible
这意味着每当我执行反序列化时 Student 类的 serialversionID 正在检查中。
我的怀疑是
1)反序列化时必须要有Student类吗?
2)根据序列化定义,为了通过网络将java对象作为字节流传输,我们正在执行序列化。所以如果一个对象是通过网络传输的,那么Student类如何在另一端可用。
例如,在我的应用程序中,每个实体(Hibernate 实体)都是 可序列化。 因为我的 Web 应用程序存在于不同的服务器和我的数据库中 在不同的服务器中。这就是我们实施的原因 可序列化。在这种情况下,你能解释一下序列化是如何工作的吗?
提前谢谢...
【问题讨论】:
标签: java serialization