zoukankan      html  css  js  c++  java
  • 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 中下载到本地后进行编译测试。

    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);
            }
        }
    }
    
  • 相关阅读:
    trident介绍
    Effective TensorFlow Chapter 4: TensorFlow中的广播Broadcast机制【转】
    tslib移植笔记(1)【转】
    jz2440-linux3.4.2-kernel移植【学习笔记】【原创】
    Linxu内核版本号后面多出字符串或者+号【学习笔记】
    向linux内核版本号添加字符/为何有时会自动添加"+"号或者"xxx-dirty"【转】
    chrome浏览器新建标签打开页面【学习笔记】
    jz2440-uboot-201204版本移植【学习笔记】【原创】
    Ubuntu 14.04 下安装 TFTP 艰辛之路【转】
    更改UBoot实现通过loady命令下载代码【转】
  • 原文地址:https://www.cnblogs.com/huyuchengus/p/11312677.html
Copyright © 2011-2022 走看看