标签:obj unshared entity 问题 else new 序列化 Serializable
创建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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。