序列化与反序列化:如何通过网络传输结构化的数据?
二进制流和字节流本质上是一样的。
将结构化数据转换为字节流的过程称之为序列化。序列化同样适用于将结构化数据保存在文件中。
序列化的因素:
(1)序列化后的数据最好易于阅读
(2)实现简单
(3)速度快
(4)序列化后的信息密度越大越好
对于强业务类系统,比如电商类、社交类的系统,他们的特点是业务复杂,但对性能要求没有那么苛刻,推荐使用json。如果json的性能不够,可以使用kryo。
kryo.register(User.class);
Output output = new Output(new FileOutputStream("file.bin"));
kryo.writeObject(output, user);
Kryo序列化与Java序列化
https://blog.csdn.net/qq_36142114/article/details/80540570
为什么不能直接把内存中,对象对应的二进制数据直接通过网络发送出去,或者保存在文件中呢?为什么还需要序列化和反序列化呢?
内存中的对象数据应该具有语言独特性,例如表达相同业务的User对象(id/name/age字段),Java和PHP在内存中的数据格式应该不一样的,如果直接用内存中的数据,可能会造成语言不通。通常两个服务之间没有严格要求语言必须一致,只要对序列化的数据格式进行了协商,任何2个语言直接都可以进行序列化传输、接收
消息队列需要更高性能的序列化和反序列化