java序列化与反序列化

本文介绍了Java中的序列化和反序列化概念,包括对象持久化和网络传输对象的应用。强调序列化的类需实现Serializable接口,且transient修饰的变量不会被序列化。文中提到了四种序列化传输方案:JSON、XML、ProtoBuf和MessagePack,并对MessagePack进行了详细说明,指出其能节省带宽但可能增加代码侵入性。提供了msgpack-java的快速入门链接和安装指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先说下序列化和反序列化的概念:

序列化:  将对象转换为字节的过程.成为对象序列化

反序列化:将字节转换为对象的过程,成为对象反序列化

  1. 对象的持久化概念:把字节保存的硬盘上永久的存放
  2. 网络传输对象概念:客户端将对象序列化为字节(序列化),变成二进制的形式发送到服务器端端,服务器端接受到字节对象后,反序列化成对象

 

注意序列化的类必须要实现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));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值