纠结这个知识点只是偶然。
最开始从网上看到序列化的原因,说是为了能够持久化和网络传输,其实这样的说法我个人认为不准确,至少我就被误导了,难道没有序列化的就不能够持久化到磁盘就不能够在网络上传输了吗?然后就带着这两个问题寻找答案。
1.数据不管你是否已经序列化,都可以写在磁盘中,并且也可以在网络上传输。但是如果没有序列化过的数据展示出来的就难以给除了计算机之外的识别。因为一串串的二进制代码,人是很难识别的,当然啦,序列化之后在磁盘和网络传输的时候使用的都是用字节(二进制数据)。
2.序列化是为了保存对象的当前状态,比如一个person类在某个运行时刻的name是"张三",如果此时需要将"张三"这个人给保存下来,并且以后再使用或者发送到别的机器(例如此时它生病了,得给它的状态给保存下来,通过网络发送到别的机器(医生)去给他治病)。
3.序列化按照指定的序列化规则,对对象中的各个数据进行排版,然后反序列化的时候就按照规则可以得到与序列化前一模一样的对象(在某一个时刻下创建的对象在别的地方使用,如果没有将对象
持久化的话,对象的生命会被垃圾回收机制给回收掉,最长不可能超过虚拟机的生命周期,同时也不能将该对象使用于除了非本台jvm以外的jvm使用,前面特写的持久化要和序列化分开,序列化之后的数据再去持久化,然后在再按照指定规则将已经被持久化的数据反序列化出来)。
4.为什么要保存对象的状态呢?我不保存状态也是可以将数据保存起来的啊,比如存放到数据库中。其实将对象的状态保存到数据库中是将对象进行了拆解,原本一个完整的对象在数据库中就不能够体现出来了,如果持久化了一个对象,在磁盘里就可以很直观的表现出来是一个对象,然后再反序列化出来就可以了。
5.对于3、4貌似有些离题,因为重心在说持久化,其实要明白不序列化的也可以持久化和网络传输,但是持久化可以理解成为了更好的识别和编程。
6.对于序列化id就是为了应对序列化机制而产生的一个手段,为了保证对象的唯一性,和不重复存储,这写可以去java核心技术卷中找到。
参考书籍:java核心技术卷2,原书第九版,java编程思想,head first java
要是有什么说的不对的地方欢迎请指出,如有不理解的地方请私信:yelinsheng1@163.com