数据序列化(Serialization)
数据序列化就是将对象或者数据结构转化成特定的格式,使其可在网络中传输,或者可存储在内存或者文件中。反序列化则是相反的操作,将对象从序列化数据中还原出来。
而数据序列化后的数据格式可以是二进制,可以是XML,也可以是JSON等任何格式。
我们要明确的是:数据序列化的重点在于数据的交换和传输。
序列化的关注点/衡量标准
1.序列化后的数据大小
因为序列化后的字节流(二进制数据)通常是通过网络进行传输的,因此序列化后的内容越少传输耗时也就越短。
补充:java原生的序列化机制,不能做到对象结构的复用,导致序列化之后的数据很大。
2.序列化和反序列化的耗时及占用的cpu
3.是否支持跨语言,跨平台
在异构的网络系统中,网络通信双方可能是不同的语言,比如一端是Java,另一端是C。或者一端是Windows操作系统,另一端是Linux操作。
Java原生序列化的缺点:
1.不能做到对象结构的复用,导致序列化后的数据较大.
2.跨语言性较差.要求对端语言只能是java语言
3.序列和反序列化耗费的cpu较多.
你可以这样理解:假设你传递的是字符串,没有问题,所有的机器都可以识别正常的字符串。
那么现在假设你传递的参数是一个 Java 对象,比如叫 cat。服务器并没有那么智能,它并不会知道你传递的是一个 Java 对象,而不是其他类型的数据,它识别不了 Java 对象。
因为Java 对象本质上是 class 字节码,服务器并不能根据这个字节码识别出该 Java 对象。所以,要提供一个公共的格式,不仅 Windows 能识别,你的服务器也能识别的公共的格式。