`
yuancihang
  • 浏览: 145003 次
  • 性别: Icon_minigender_1
  • 来自: 洛阳
社区版块
存档分类
最新评论

msgpack序列化与反序列化

    博客分类:
  • java
 
阅读更多

最近想找个二进制序列化框架把对象存起来或者放到缓存里,首先排除了protobuf和thrift, 因为这两个都要写数据定义文件太烦,后来发现msgpack好像很不错的样子,决定试试

 

1.材料

msgpack-0.6.12.jar

2.先定义两个对象

package test.magpack;

import org.msgpack.annotation.Message;

@Message
public class Message2 {

	public Message2(){
		
	}
	
	public Message2(String name){
		this.name = name;
	}
	
	public String name;
	
}

 

package test.magpack;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.msgpack.annotation.Message;

@Message // Annotation
public class MyMessage {
	public String name;
    public double version;
    public List<String> list = new ArrayList<String>();
    public Map<String, String> map = new HashMap<String, String>();
    public List<Message2> list2 = new ArrayList<Message2>();
    public Map<String, Message2> map2 = new HashMap<String, Message2>();
    public Message2 message;
}

 

3. 测试序列化与反序列化对象

public static void main(String[] args) throws IOException {
		System.setProperty("msgpack.dynamic-codegen.enabled", "false");
		
		MyMessage src = new MyMessage();
        src.name = "msgpack";
        src.version = 0.6;
        src.list.add("1111");
        src.list.add("2222");
        src.map.put("a", "aaaa");
        src.map.put("b", "bbbb");
        src.message = new Message2("=============");
        src.list2.add(new Message2("sssss"));
        src.list2.add(new Message2("ffffff"));
        src.map2.put("aa", new Message2("xxxx"));
        src.map2.put("bb", new Message2("zzzz"));

        MessagePack msgpack = new MessagePack();
        
        // Serialize
        byte[] bytes = msgpack.write(src);
        
        System.out.println(bytes.length);
        
        // Deserialize
        MyMessage dst = msgpack.read(bytes, MyMessage.class);

        System.out.println(dst.name);
        System.out.println(dst.version);
        System.out.println(dst.list);
        System.out.println(dst.map);
        System.out.println(dst.message.name);
        System.out.println(dst.list2);
        System.out.println(dst.map2);
	}

 

这个java的msgpack实现对 对象的嵌套和泛型,list, map都支持, 很好用

 

 

 

分享到:
评论

相关推荐

    msgpack工具库二进制格式序列化反序列化

    **序列化与反序列化** 序列化是将对象转换为可存储或可传输的形式的过程,而反序列化则是将这种形式的数据恢复为原来的对象。MsgPack库通过高效地编码和解码数据结构,实现了快速的序列化和反序列化。这在处理大量...

    swift-Swift的MsgPack序列化和反序列化器

    在Swift中,使用MsgPack进行序列化和反序列化能够提高应用性能,因为与JSON等文本格式相比,二进制格式通常占用更少的空间,处理速度更快。 MsgPack的核心概念包括基本类型(如整数、浮点数、布尔值和字符串)以及...

    RPC调用msgpack序列化问题分析.docx

    反序列化失败的原因是由于 msgpack 序列化的特性之一:无法改变字段顺序。在 JSF 调用中,父 VO 增加了一个新的字段,这导致了序列化的对象顺序改变。msgpack 序列化结果只有 value,并且 value 进行了专属映射。 ...

    序列化和反序列化doc文档.rar

    在“第二节序列化和反序列化技术的原理与选型.docx”中,你可能找到关于各种序列化技术的比较,如protobuf、msgpack、JSON、XML等,以及它们各自的优缺点。而“【笔记】序列化和反序列化.docx”可能包含作者对学习...

    网络游戏-游戏数据的序列化与反序列化处理方法及装置.zip

    在网络游戏开发中,数据的序列化与反序列化是至关重要的技术环节,它们涉及到游戏状态的存储、网络传输以及跨平台兼容性等多个方面。本文将深入探讨这些概念,并结合提供的"网络游戏-游戏数据的序列化与反序列化处理...

    对象-序列化-反序列化相关资料

    对象的序列化与反序列化是计算机编程中的关键概念,特别是在数据存储、网络传输和状态持久化等场景中。这两个过程对于理解数据处理流程至关重要。 序列化是指将一个对象的状态转换为可存储或可传输的形式,通常是...

    消息序列化/反序列化的基准和用法

    消息序列化与反序列化是IT领域中一个关键的概念,特别是在分布式系统、网络通信和数据存储中。这个过程涉及到将对象或数据结构转换为可传输的格式,然后在接收端还原为原来的对象或数据结构。这允许不同系统之间有效...

    msgpack:一个 `msgpack` 序列化器和反序列化器

    消息包msgpack序列化器和反序列化器概要 package msgpack_testimport ( "fmt" "time" msgpack "github.com/lestrrat-go/msgpack" "github.com/pkg/errors")type EventTime struct { time. Time}func init () { if ...

    MsgPacketizer:基于msgpack的序列化器反序列化器+用于Arduino的打包和更多功能

    MsgPacketizer 基于的序列化器/解串器+打包用于Arduino等特征单行序列化/反序列化或发布/订阅+打包+健壮的发送/接收序列化器/解串器几乎支持所有与相同的标准C ++类型支持自定义类序列化/反序列化基于序列化器/解串...

    用于 Python 的 Msgpack 序列化/反序列化库,使用 PyO3 和 rust-msgpack 用 Rust 编写。 重启orjson。 msgpack.org[Python]

    它是orjson的 fork/reboot 它的序列化速度比msgpack-python快,反序列化速度稍慢(现在)。它支持的序列化:数据类,日期时间,numpy的,pydantic和UUID实例本身。与其他 Python msgpack 库相比,它的特点和缺点:本...

    msgpack和msgpack-python包.zip

    它包含了Python到msgpack和msgpack到Python的转换功能,包括序列化Python对象到msgpack格式,以及反序列化回Python对象。这个库对于那些需要快速、高效处理大量数据的Python应用尤其有用,例如在PyTorch这样的深度...

    node-msgpack, 面向NodeJS的空间高效对象序列化库.zip

    node-msgpack, 面向NodeJS的空间高效对象序列化库 node-msgpack 是 NodeJS插件的插件,提供使用 MessagePack插件库序列化和序列化JavaScript对象的API 。 原生 JSON 对象相比,这里插件的性能并不太差,序列化数据所...

    msgpack-java:Java msgpack.org的MessagePack序列化程序实现[Java]

    是二进制序列化格式。 如果您需要快速,紧凑的JSON替代方案,那么MessagePack是您的朋友。 例如,可以将一个小整数编码为一个字节,而短字符串则只需要一个字节前缀+原始字节数组即可。 MessagePack实现已经有多种...

    加快Java的文件序列化速度

    - JSON、XML等文本格式的序列化速度较慢,而二进制格式(如protobuf、msgpack)通常更快。 9. **内存管理**: - 确保有足够的堆内存,避免因频繁GC导致的性能下降。 10. **硬件优化**: - 使用SSD硬盘,相比于...

    javascript实现序列化serializable unserializable

    此外,有一些第三方库,如`msgpack.js`或`bson`,提供了更高效的序列化和反序列化方案。它们使用二进制格式来表示数据,相比于JSON,可以在处理大量数据时提供更好的性能。但这也意味着在不同平台之间交换数据时需要...

    C/C++ msgpack头文件和应用实例整理

    C/C++中的msgpack库提供了方便的API来实现数据的序列化和反序列化。这个库允许开发者将C++对象转换为msgpack二进制格式,以便在网络间传输或存储,同时也能将接收到的msgpack数据还原为原来的C++对象。 **头文件和...

    asyncio-rpc:带有MsgPack序列化的Asyncio远程过程调用(RPC)客户端和服务器

    Msgpack序列化,带有使用自己的数据类的选项(Python 3.7) Redis通信层 可以添加其他序列化方法和通信层 例子 可以从以下目录运行示例,以获取数据类示例(使用localhost作为Redis主机): &gt;&gt;&gt; python3.7 - m ...

    msgpack(C语言)简单用例

    本文将探讨如何在C语言中使用MsgPack库进行基本的数据序列化和反序列化操作。 首先,要使用MsgPack,你需要下载并安装MsgPack的C库。这通常包括获取源代码,配置项目,然后编译和安装。在Linux系统上,你可以通过...

    Python-srsly用于Python的现代高性能序列化工具

    Python-srsly是一个针对Python开发的现代高性能序列化库,其设计目的是为了提供高效的数据序列化和反序列化功能,特别是在处理JSON、MessagePack和BSON等格式时表现优秀。这个库是为了解决标准库如json和pickle在...

    msgpack

    例如,在Python中,可以使用`msgpack`库进行序列化和反序列化操作。以下是一个简单的Python示例: ```python import msgpack # 序列化数据 data = {"name": "John", "age": 30, "city": "New York"} packed = ...

Global site tag (gtag.js) - Google Analytics