开发者社区> honeymoose> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
线程 - Java 多线程编程(下)
线程 - Java 多线程编程(下)
25 0
线程 - Java 多线程编程(上)
线程 - Java 多线程编程(上)
62 0
Java多线程那些事,对Java并发编程2w余字的总结,超详细(从入门到完全掌握)
Java多线程那些事,对Java并发编程2w余字的总结,超详细(从入门到完全掌握)
79 0
java多线程中的死锁、活锁、饥饿、无锁都是什么鬼?
死锁、活锁、饥饿是关于多线程是否活跃出现的运行阻塞障碍问题,如果线程出现了这三种情况,即线程不再活跃,不能再正常地执行下去了。
68 0
五分钟带你玩转多线程(一)java多线程基础知识简介
线程概念 进程:是一个执行中的程序,如打开网易云音乐,网易云音乐就是一个进程 线程:是进程的组成,一个进程包含多个线程,是jvm最小调度单元。如网易云音乐听歌是一个线程,评价是一个线程。
50 0
Java的并发编程中的多线程问题到底是怎么回事儿?
原创: Hollis 在我之前的一篇《再有人问你Java内存模型是什么,就把这篇文章发给他。》文章中,介绍了Java内存模型,通过这篇文章,大家应该都知道了Java内存模型的概念以及作用,这篇文章中谈到,在Java并发编程中,通常会遇到三个问题,即原子性问题、一致性问题和有序性问题。
1057 0
【MySQL集群】——Java程序连接MySQL集群
上篇简单介绍了如何在Windows环境下建立配置MySQL集群,这里用一个实现注册功能的小Demo通过jdbc的方式连接到MySQL集群中。
145 0
+关注
honeymoose
CWIKI.US 站长。 从事开发多年,在彷徨和迷失的边缘徘徊。
897
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载