MessagePack Java 0.6.X 使用一个消息打包(message-packable)类
2023-09-27 14:20:34 时间
使用注解 @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)
。
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); } } }
相关文章
- Java基础之lambda表达式(JDK1.8新特性)
- Java桌面程序打包成exe可执行文件
- Java OpenCV-4.0.0 比较两个图片的相似度2
- Java 打包下载服务器上选中的文件或目录(带进度条提示)
- mvn打包报致命错误: 1、程序包com.sun.image.codec.jpeg不存在 2、在类路径或引导类路径中找不到程序包 java.lang
- java中多线程的实现方式以及区别(2)
- Java的I/O类库的基本架构一句话介绍
- 【详细】如何将Java源码打包成可执行的jar文件(windows&linux系统都是可以执行的)
- AndroidStudio离线打包MUI集成JPush极光推送并在java后端管理推送
- exe4j打包java应用程序
- 开源 java CMS - FreeCMS2.2 敏感词管理
- Java toString的性能优化方案比较
- [Java IO]03_字符流
- JAVA神操作--使用Arthas线上热更新实战
- 在Eclipse中将Java项目打包为jar
- [Java]_[0基础]_[String的split里的坑]
- java-sproot项目打包--docker环境 用命令行执行的方法 (含容器时间差问题解决)
- Java程序导出成.jar文件、生成.exe可执行文件及打包成可执行安装程序(可在无Java环境的计算机上运行)--以个人所得税计算器为例
- 传智播客Java 二维数组
- java-基础-java/c++
- Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法
- 潜水 java类加载器ClassLoader
- java根据jar包反编译后修改再打包回jar的做法
- Java 与 Scala 使用Maven混合编译打包
- java打包/解压,编译/反编译
- 面试官,不要再问我“Java GC垃圾回收机制”了
- 为什么大型网站前端使用 PHP 后台逻辑用 Java?