`
gaozzsoft
  • 浏览: 426927 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

MessagePack使用研究

 
阅读更多

MessagePack是一个基于二进制高效的对象序列化类库,可用于跨语言通信。它可以像JSON那样,在许多种语言之间交换结构对象;但是它比JSON更快速也更轻巧。支持Python、Ruby、Java、C/C++等众多语言。比GoogleProtocol Buffers还要快4倍。

代码实现1:

 

package com.newtest;


import java.io.IOException;

import org.msgpack.MessagePack;

import org.msgpack.annotation.Message;


@Message

public class Student {

public int sAge = 0;


public String sName;


public boolean sHasPhone;


public static void main(String[] args) throws IOException {

Student stu = new Student();

stu.sAge = 13;

stu.sName = "programer";

stu.sHasPhone = true;


MessagePack pack = new MessagePack();


// 序列化

byte[] bytes = pack.write(stu);


// 反序列化

Student s = pack.read(bytes, Student.class);

System.out.println("Name: " + s.sName + "\n" + "Age: " + s.sAge + "\n"

+ "HasPhone: " + s.sHasPhone);

}

}


代码实现2:

 

package com.newtest;

 

 import java.io.IOException;

 import org.msgpack.MessagePack;

 import org.msgpack.annotation.Message;

 import org.msgpack.annotation.Optional;

 

 @Message

 public class ServerStudent {

     public int sAge = 0;

 

     public String sName;

 

     public boolean sHasPhone;

 

     /**

      * 在Server端相应的Entity里添加需要的属性, 但是为了兼容之前的数据,必须加上注解@Optional

      * Optional的作用是是否有该字段都不会影响MessagePack的正常解压

      */

     @Optional

     public double sHeight;

 

     /**

      * 该类里并没有sHeight字段,可以把它看做已经发出去的产品

      */

     @Message

     static class ClientStudent {

 

         public int sAge = 0;

 

         public String sName;

 

         public boolean sHasPhone;

     }

 

     /**

      * 与目前Server端数据字段相一致的Entity

      */

     @Message

     static class NewClientStudent {

         public int sAge = 0;

 

         public String sName;

 

         public boolean sHasPhone;

 

         public double sHeight;

     }

 

     public static void main(String[] args) throws IOException {

         ClientStudent stu = new ClientStudent();

         stu.sAge = 13;

         stu.sName = "programer";

         stu.sHasPhone = true;

 

         NewClientStudent ns = new NewClientStudent();

         ns.sAge = 10;

         ns.sName = "coder";

         ns.sHasPhone = false;

         ns.sHeight = 180;

 

         MessagePack pack = new MessagePack();

 

         // 序列化

         byte[] bytes = pack.write(stu);

         byte[] nBytes = pack.write(ns);

 

         // 反序列化

         ServerStudent s = pack.read(bytes, ServerStudent.class);

         ServerStudent ss = pack.read(nBytes, ServerStudent.class);

 

         System.out.println("之前发布出去的产品: \n" + "Name: " + s.sName + "\n"

                 + "Age: " + s.sAge + "\n" + "HasPhone: " + s.sHasPhone+"\n\n");

         System.out.println("目前的产品: \n" + "Name: " + ss.sName + "\n" + "Age: "

                 + ss.sAge + "\n" + "HasPhone: " + ss.sHasPhone + "\n"

                 + "Height: " + ss.sHeight);

     }

 

 }

需要进入的JARS:见附件

下载链接:

  • 大小: 32.4 KB
分享到:
评论

相关推荐

    MessagePack Java 示例程序

    通过深入研究这些示例,你将能掌握MessagePack在Java环境中的应用,从而提升你的数据处理能力。同时,这也是一次学习数据结构和序列化技术的好机会,特别是对于那些涉及网络通信和分布式系统开发的项目。

    netty权威指南第二版源码 maven项目 支持messagepack

    通过深入研究《Netty权威指南》第二版的源码,结合Maven项目的构建方式,开发者不仅可以掌握Netty的基本用法,还能深入理解其底层机制,并学习到如何结合MessagePack进行数据交换,这对于提升个人在分布式系统和网络...

    cpp-cmpMessagePack序列化的实现协议

    在具体使用cpp-cmp时,首先需要包含头文件,然后定义要序列化的对象,接着使用提供的函数如`to_msgpack`和`from_msgpack`将对象转换成MessagePack格式的字节序列或从字节序列还原对象。例如: ```cpp #include ...

    jetty-util-9.4.0.M0.zip

    2. **MessagePack支持**:MessagePack是一种高效的二进制序列化格式,比JSON更小,更适合在网络传输和存储中使用。upickle库也支持将Scala数据结构转换为MessagePack格式。 3. **无依赖**:upickle库本身不依赖其他...

    Ruby-rabl普通的ruby模板包含jsonbsonxmlplist和msgpack支持

    MsgPack(MessagePack)是一种高效的二进制序列化格式,与JSON类似但更紧凑,适合在网络通信和存储中使用。RABL的MsgPack支持让你能够快速地将Ruby对象转换为MsgPack格式的数据。 **RABL的使用** 在实际项目中,...

    SNAP:GameMaker Studio 2.3.0的轻松structarray保存和加载

    通过研究这个项目,你可以学习如何使用SNAP进行structarray的序列化和反序列化,以及如何根据需要选择不同的数据格式。 总的来说,SNAP为GameMaker Studio 2.3.0的开发提供了强大的数据管理工具,使开发者能够轻松...

    冒险岛 096 游戏服务端

    Java提供了Serialization接口,但考虑到性能,开发者可能更倾向于使用protobuf、MessagePack或JSON等轻量级序列化库。 3. **数据库操作**:为了存储玩家信息、游戏状态等大量数据,服务端需要与数据库交互。Java的...

    Scalable-networking-programming中文版和英文版

    2. **并发与多线程**:讲解如何在多核CPU环境下使用多线程和多进程进行并发编程,以提高网络服务的处理能力。 3. **异步I/O模型**:详细讨论了各种异步I/O模型,如Select、Poll、Epoll和事件驱动编程(如libevent、...

    C#网络通信源码全集合

    开发者可以使用它创建自定义的通信协议,实现更复杂的功能。同时,C#的异步编程模型(如`async/await`关键字)使得网络操作可以在不阻塞主线程的情况下进行,提高应用程序的响应性和效率。 HTTP协议是互联网上的...

    protostuff 1.4源码

    - **netty**:暗示 Protostuff 可能与 Netty 这个高性能的异步事件驱动网络应用框架有结合,可以在 Netty 中使用 Protostuff 进行数据传输。 - **序列化** 和 **反序列化**:这两个是关键操作,序列化是将对象转换...

    c++开源库大全21

    在IT领域,C++是一种广泛使用的编程语言,其丰富的库支持了各种各样的应用开发,包括机器人学、科学计算、脚本以及序列化等。以下是一些从标题、描述和标签中提取的重要C++开源库及其详细介绍: 1. **Robotics** -...

Global site tag (gtag.js) - Google Analytics