千家信息网

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

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,使用注解 @Message 来让你可以序列化你自己类中对象的 public 字段。本代码可以在 https://github.com/cwiki-us-demo/messagepack-6-demo-
千家信息网最后更新 2025年01月31日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);        }    }}

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

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

为了使用 PackerUnpacker 对象,请调用 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


0