1. writeObject和readObject必须是private的, 否则不会被调用.
2. Object的field的读写顺序, 遵循先进先出的原则.
3. 从ObjectInputStream中读Object的原理是: 先从流中读出每个元素的类型, 例如是数组, String还是Object等, 如果是Object, 就继续从流中读取这个类的描述信息, load这个类, 然后取这个类的第一个非Serializable的父类的public无参数构造函数, 通过构造函数创建实例, 最后调用readObject或defaultReadObject为这个实例赋值.
4. 从3可以看出, 在从ObjectInputStream中读出的Object时,和写进去的不是同一个Object。
5. 不用怀疑, JVM有办法调用你的类的private方法和父类的default构造函数.
6. 序列化写一个类的object, 序列化读的程序的classpath中也要有这个类, 否则读时跑出ClassNotFound.
7. 序列化的这个类的第一个非Serializable的父类, 必须有一个public的, 无参数的构造函数.
8. 具体细节可以参考JDK源码中的java.io.ObjectInputStream和java.io.ObjectStreamClass.
9. 总之, 序列化读就是创建一个空Obejct, 然后通过readObject赋值的过程.
10. 默认的序列化,会同时序列化static的field,就如同普通的field一样。
11. 序列化写时,同一个对象,2次写入,不论是直接写入,还是做为其他object的一个成员变量被连带写入的,实际上只是写了一次,另一次只是在stream做了一个标记。序列化读时,读2次,返回的实际上也是一个对象。
12. 将2个互相引用的对象序列化,根据上面的一个对象只会被序列化一次的原则,因此实际上这2个对象也只是分别被写入一次。
13. 向ObjectOutputStream中写一个Object,却从ObjectInputStream中连续读两次,第二次出EOFException.
14. 只有写时用了writeInt等方法,读时才能用readInt,否则出EOFException。
15. Externalizable与Serializable不同,其反序列化时,会通过这个类的默认构造函数来构造实例,随后再调用readExternal,因此如果这个类没有默认构造函数,或默认构造函数不是public的,那么,就会出异常。
分享到:
相关推荐
序列化 serializable demo ! 序列化 serializable demo !
說明如何將Serializable物件轉成stream
Serializable的增删改查操作,已经经过验证,可以直接运行。
java->serializable深入了解 java->serializable深入了解 java->serializable深入了解
Laravel开发-serializable-values Luminark可序列化值包。
Java_Serializable(序列化) 的理解和总结
Intent传递数据是android开发中最长用的数据传递方式,可是要传递对象不怎么常用,这里介绍第一种传递对象的方法Serializable传递
java.io.Serializable序列化问题
详细讲解了C#中关于对象序列化的知识,包括基本序列化、选择序列化、自定义序列化;对于了解在C#中如何进行对象的序列化有价值
bundle传递基本数据,Parcelable类型数据,Serializable类型数据
Android序列化——Serializable与Parcelable
java 序列化 对象 Serializable 写着玩的Demo 简单 实用
Android中的Serializable
java 将对象序列化 输出对象的值,不懂可以百度序列化干啥的,为什么要用序列化,好处。
android Activity之间数据传递 Parcelable和Serializable接口的使用的具体实例代码,详情请看>http://blog.csdn.net/js931178805/article/details/8268144
[Serializable]在C_中的作用-NET_中的对象序列化,希望有所帮助
java序列化(Serializable)的作用和反序列化.doc 有详细的讲解哦。 在什么地方用的到都有说明的.
NULL 博文链接:https://tony-lee-s.iteye.com/blog/1416044
该软件包增加了对Built_value和kt.dart集合的支持 该软件包增加了对mobx可观察集合的支持 json_serializable_mobx和json_serializable_immutable_collections使用的自定义TypeHelpers的实用程序函数也可能被其他人...
序列化与反序列 首先来了解一下序列化与反序列化。 序列化 由于存在于内存中的对象都是暂时的,无法长期驻存,为了把对象的状态保持下来,这时需要把对象写入到磁盘或者其他介质中,这个过程就叫做序列化。...