首先说下序列化和反序列化的概念:
序列化: 将对象转换为字节的过程.成为对象序列化
反序列化:将字节转换为对象的过程,成为对象反序列化
- 对象的持久化概念:把字节保存的硬盘上永久的存放
- 网络传输对象概念:客户端将对象序列化为字节(序列化),变成二进制的形式发送到服务器端端,服务器端接受到字节对象后,反序列化成对象
注意序列化的类必须要实现Serializable接口 transient修士变量不被序列化
序列化与反序列化传输时有几种方案
1.json形式,客户端将对象转换为json后服务端进行json转换为对象.
2.Xml类型
3.ProtoBuf 谷歌自定义协议(不太了解)
4.MessagePack(很牛逼,能将json中key给去掉,然后通过反射机制按照顺序对字段进行复制.所以对于带宽来说比较节省,但是个人觉得对代码有侵入性,需要每个dto引入@Message注解.)
而且反射也是有缺点的:
使用起来也比较简单:具体可去官网查看https://msgpack.org/
下面摘自msgpack官网.
适用于Java的MessagePack
msgpack-java的快速入门在此处提供。
如何安装
您可以通过maven安装msgpack:
<dependencies>
...
<dependency>
<groupId>org.msgpack</groupId>
<artifactId>msgpack</artifactId>
<version>${msgpack.version}</version>
</dependency>
...
</dependencies>
使用值的简单序列化/反序列化/鸭子输入
// Create serialize objects.
List<String> src = new ArrayList<String>();
src.add("msgpack");
src.add("kumofs");
src.add("viver");
MessagePack msgpack = new MessagePack();
// Serialize
byte[] raw = msgpack.write(src);
// Deserialize directly using a template
List<String> dst1 = msgpack.read(raw, Templates.tList(Templates.TString));
System.out.println(dst1.get(0));
System.out.println(dst1.get(1));
System.out.println(dst1.get(2));
// Or, Deserialze to Value then convert type.
Value dynamic = msgpack.read(raw);
List<String> dst2 = new Converter(dynamic)
.read(Templates.tList(Templates.TString));
System.out.println(dst2.get(0));
System.out.println(dst2.get(1));
System.out.println(dst2.get(2));