其他分享
首页 > 其他分享> > entity序列化问题

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 序列化

标签:obj,unshared,entity,问题,else,new,序列化,Serializable
来源: https://www.cnblogs.com/hanyk/p/16538974.html