entity序列化问题
创建entity的时候一般会序列化一下,虽然基本不会用到 ,但是没有序列化的话深克隆就会出错
序列化就是对实例对象的状态(State 对象属性而不包括对象方法)进行通用编码(如格式化的字节码)并保存,以保证对象的完整性和可传递性。
简而言之:序列化,就是为了在不同时间或不同平台的JVM之间共享实例对象
// 经常使用如下:
public static void main(String[] args) throws Exception {
File file = new File("user.ser");
ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream(file));
User user = new User("zhang", 18, Gender.MALE);
oout.writeObject(user);
oout.close();
ObjectInputStream oin = new ObjectInputStream(new FileInputStream(file));
Object newUser = oin.readObject();
oin.close();
System.out.println(newUser);
}
如没有 实现Serializable接口,在序列化时,使用ObjectOutputStream的write(object)方法将对象保存时将会出现异常。其实 java.io.Serializable 只是一个没有属性和方法的空接口,但是为何一定要实现 Serializable 才能进行序列化呢?
使用 ObjectOutputStream 来持久化对象, 对于此处抛出的异常,查看该类中实现如下:
private void writeObject0(Object obj, boolean unshared) throws IOException {
// ...
// remaining cases
if (obj instanceof String) {
writeString((String) obj, unshared);
} else if (cl.isArray()) {
writeArray(obj, desc, unshared);
} else if (obj instanceof Enum) {
writeEnum((Enum) obj, desc, unshared);
} else if (obj instanceof Serializable) {
writeOrdinaryObject(obj, desc, unshared);
} else {
if (extendedDebugInfo) {
throw new NotSerializableException(
cl.getName() + "\n" + debugInfoStack.toString());
} else {
throw new NotSerializableException(cl.getName());
}
}
// ...
}
从此可知, 如果被写对象类型是String、数组、Enum、Serializable,就可以进行序列化,否则将抛出NotSerializableException。
参考文章:Entity实体类为什么要实现Serializable接口才能被序列化_lengxingxing_的博客-CSDN博客_entity 序列化

浙公网安备 33010602011771号