MessagePack Java 0.6.X 使用一个消息打包(message-packable)类

简介: 使用注解 @Message 来让你可以序列化你自己类中对象的 public 字段。本代码可以在 https://github.com/cwiki-us-demo/messagepack-6-demo-java/blob/master/src/test/java/com/insight/demo/msgpack/MessagePack6Object.java 中下载到本地后进行编译测试。

使用注解 @Message 来让你可以序列化你自己类中对象的 public 字段。

本代码可以在 https://github.com/cwiki-us-demo/messagepack-6-demo-java/blob/master/src/test/java/com/insight/demo/msgpack/MessagePack6Object.java 中下载到本地后进行编译测试。

package com.insight.demo.msgpack;

import org.junit.Test;
import org.msgpack.MessagePack;
import org.msgpack.annotation.Message;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.UUID;

import static org.junit.Assert.assertEquals;

/**

  • MessagePack6Objects
    *
  • @author yhu
    */

public class MessagePack6Object {

final Logger logger = LoggerFactory.getLogger(MessagePack6Object.class);

/**
 * MessageData Message Object
 */
@Message // Annotation
public static class MessageData {
    // public fields are serialized.
    public String uuid;
    public String name;
    public double version;
}
/**
 * Test MessagePack6Objects
 */
@Test
public void testMessagePack6Objects() {
    logger.debug("MessagePack6Objects for Objects");

    String uuid = UUID.randomUUID().toString();

    // INIT OBJ
    MessageData src = new MessageData();
    src.uuid = uuid;
    src.name = "MessagePack6";
    src.version = 0.6;

    try {
        MessagePack msgPack = new MessagePack();

        // Serialization
        logger.debug("------ Serialization ------");
        byte[] bytes = msgPack.write(src);
        logger.debug("Bytes Array Length: [{}]", bytes.length);

        // Deserialization
        logger.debug("------ Deserialization ------");
        MessageData dst = msgPack.read(bytes, MessageData.class);
        logger.debug("Check Object for UUID: [{}]", dst.uuid);

        assertEquals(uuid, dst.uuid);

    } catch (Exception ex) {
        logger.error("MessagePack Serialization And Deserialization error", ex);
    }
}

}

如果你希望按照顺序序列化多个对象的话,你可以使用  Packer 和  Unpacker 多个对象。

这是因为 MessagePack.write(Object) 和 read(byte[]) 实际上每次都调用创建了 Packer 和 Unpacker 对象。

为了使用 Packer 和  Unpacker 对象,请调用 createPacker(OutputStream) 和  createUnpacker(InputStream)。

本代码可以 https://github.com/cwiki-us-demo/messagepack-6-demo-java/blob/master/src/test/java/com/insight/demo/msgpack/MessagePack6Objects.java 中查看。

package com.insight.demo.msgpack;

import org.junit.Test;
import org.msgpack.MessagePack;
import org.msgpack.annotation.Message;
import org.msgpack.packer.Packer;
import org.msgpack.unpacker.Unpacker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.UUID;

import static org.junit.Assert.assertEquals;

/**

  • MessagePack6Objects
    *
  • @author yhu
    */

public class MessagePack6Objects {

final Logger logger = LoggerFactory.getLogger(MessagePack6Objects.class);

/**
 * MessageData Message Objects
 */
@Message // Annotation
public static class MessageData {
    // public fields are serialized.
    public String uuid;
    public String name;
    public double version;
}
/**
 * Test MessagePack6Objects
 */
@Test
public void testMessagePack6Objects() {
    logger.debug("MessagePack6Objects for Objects");

    String uuid = UUID.randomUUID().toString();

    // INIT OBJ
    MessageData src1 = new MessageData();
    src1.uuid = uuid;
    src1.name = "MessagePack6-src1";
    src1.version = 0.6;

    MessageData src2 = new MessageData();
    src2.uuid = uuid;
    src2.name = "MessagePack6-src2";
    src2.version = 10.6;

    MessageData src3 = new MessageData();
    src3.uuid = uuid;
    src3.name = "MessagePack6-src3";
    src3.version = 1.6;

    try {
        MessagePack msgPack = new MessagePack();

        // Serialization
        logger.debug("------ Serialization ------");
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        Packer packer = msgPack.createPacker(out);
        packer.write(src1);
        packer.write(src2);
        packer.write(src3);

        byte[] bytes = out.toByteArray();
        logger.debug("Bytes Array Length: [{}]", bytes.length);

        // Deserialization
        logger.debug("------ Deserialization ------");
        ByteArrayInputStream in = new ByteArrayInputStream(bytes);
        Unpacker unpacker = msgPack.createUnpacker(in);

        MessageData dst1 = unpacker.read(MessageData.class);
        MessageData dst2 = unpacker.read(MessageData.class);
        MessageData dst3 = unpacker.read(MessageData.class);

        logger.debug("Check Object for UUID: [{}]", dst1.uuid);

        assertEquals(uuid, dst1.uuid);

    } catch (Exception ex) {
        logger.error("MessagePack Serialization And Deserialization error", ex);
    }
}

}

https://www.cwiki.us/display/Serialization/QuickStart+For+MessagePack+Java+0.6.X

目录
相关文章
|
4天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
28 3
|
1天前
|
安全 Java 程序员
|
2天前
|
Java
Java Class类
Java Class类
8 0
|
8天前
|
Java 编译器
Java Character 类
4月更文挑战第13天
|
9天前
|
存储 Java
Java基础教程(7)-Java中的面向对象和类
【4月更文挑战第7天】Java是面向对象编程(OOP)语言,强调将事务抽象成对象。面向对象与面向过程的区别在于,前者通过对象间的交互解决问题,后者按步骤顺序执行。类是对象的模板,对象是类的实例。创建类使用`class`关键字,对象通过`new`运算符动态分配内存。方法包括构造函数和一般方法,构造函数用于对象初始化,一般方法处理逻辑。方法可以有0个或多个参数,可变参数用`类型...`定义。`this`关键字用于访问当前对象的属性。
|
13天前
|
Java Shell
Java 21颠覆传统:未命名类与实例Main方法的编码变革
Java 21颠覆传统:未命名类与实例Main方法的编码变革
13 0
|
13天前
|
Java
Java 15 神秘登场:隐藏类解析未知领域
Java 15 神秘登场:隐藏类解析未知领域
16 0
|
14天前
|
安全 Java
append在Java中是哪个类下的方法
append在Java中是哪个类下的方法
23 9
|
15天前
|
JavaScript Java 测试技术
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
30 0
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
|
16天前
|
存储 安全 Java
java多线程之原子操作类
java多线程之原子操作类