序列化的核心目的是为了解决网络通信之间的对象传输的问题。也就是说,怎么去把当前J V M进程里面的一个对象跨网络传输到另外一个J V M进程进行恢复。
而序列化就是把内存里面的对象转换为字节流,以便用来实现存储和传输,而反序列化就根据从文件或网络上获取到的对象的字节流,根据字节流里面保存的对象描述信息和状态,重新构建一个新的对象。
其次,系列化的前提是为了保证通信双方对于对象的一个可识别性,所以很多时候我们会把对象先转化为通用的解析格式,比如说Json、Xml或者其他一些格式,然后再把它们转化为数据流进行网络传输,从而实现跨平台或者跨语言的一个可识别性。
补充:
关于序列化的选择问题。市面上开源的序列化技术非常多,比如说像Json、Xml、Protobuf、Kyro、Haison等等。
那么在实际应用里哪种系列化更合适,我认为有几个关键因素。
第一个是系列化之后的一个数据大小。因为数据大小会影响到传输的一个性能。
第二个是序列化的性能。序列化耗时,较长会影响想到业务的一个性能。
第三个是要判断他是否支持跨平台和跨语言的一个特性。
第四个是技术的成熟度。越成熟的方案使用的公司越多,也就越稳定。
总结:
序列化是将对象转换成字节流数据用于传输和存储。
反序列化是读取字节流数据转换构成对象。