前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >MessagePack Java 0.6.X List, Map 对象的序列化和反序列化

MessagePack Java 0.6.X List, Map 对象的序列化和反序列化

原创
作者头像
HoneyMoose
修改于 2019-08-07 06:59:04
修改于 2019-08-07 06:59:04
56900
代码可运行
举报
文章被收录于专栏:CWIKIUSCWIKIUS
运行总次数:0
代码可运行

为了序列化原生的容器对象例如  List 和 Map 对象,你必须使用 Template

Template 对象是 serializer 和 deserializer 的配对。例如,为了序列化一个 List 对象,在 List 对象中 Integer 对象为元素,你可以使用下面的方法来创建一个模板对象(Template object)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Template listTmpl = Templates.tList(Templates.TInteger);

类 tList, TInteger 是静态方法,字段为 Templates。

一个 List 和 Map 对象的用例如下显示:

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.insight.demo.msgpack;

import org.junit.Test;
import org.msgpack.MessagePack;
import org.msgpack.packer.Packer;
import org.msgpack.template.Template;
import org.msgpack.unpacker.Unpacker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.math.BigInteger;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static org.msgpack.template.Templates.*;

/**
 * MessagePack6Template
 *
 * @author yhu
 */
public class MessagePack6Template {
    final Logger logger = LoggerFactory.getLogger(MessagePack6Template.class);


    /**
     * Test MessagePack6Template
     */
    @Test
    public void testMessagePack6Template() {
        logger.debug("MessagePack6Template for Template");

        MessagePack msgpack = new MessagePack();
        try {

            // Create templates for serializing/deserializing List and Map objects
            Template<List<String>> listTmpl = tList(TString);
            Template<Map<String, String>> mapTmpl = tMap(TString, TString);

            //
            // Serialization
            //

            ByteArrayOutputStream out = new ByteArrayOutputStream();
            Packer packer = msgpack.createPacker(out);

            // Serialize List object
            List<String> list = new ArrayList<String>();
            list.add("msgpack");
            list.add("for");
            list.add("java");
            packer.write(list); // List object

            // Serialize Map object
            Map<String, String> map = new HashMap<String, String>();
            map.put("sadayuki", "furuhashi");
            map.put("muga", "nishizawa");
            packer.write(map); // Map object

            //
            // Deserialization
            //

            byte[] bytes = out.toByteArray();
            ByteArrayInputStream in = new ByteArrayInputStream(bytes);
            Unpacker unpacker = msgpack.createUnpacker(in);

            // to List object
            List<String> dstList = unpacker.read(listTmpl);

            // to Map object
            Map<String, String> dstMap = unpacker.read(mapTmpl);

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MessagePack Java 0.6.X 使用一个消息打包(message-packable)类
使用注解 @Message 来让你可以序列化你自己类中对象的 public 字段。
HoneyMoose
2019/08/07
4030
MessagePack Java 0.6.X 动态类型
我们知道 Java 是一个静态类型的语言。通过输入 Value MessagePack能够实现动态的特性。
HoneyMoose
2019/08/07
3600
MessagePack Java 0.6.X 多种类型变量的序列化和反序列化
类 Packer/Unpacker 允许序列化和反序列化多种类型的变量,如后续程序所示。这个类启用序列化和反序列化多种类型的变量和序列化主要类型变量以及包装类,String 对象,byte[] 对象, ByteBuffer 对象等的方法相似。
HoneyMoose
2019/08/07
5820
MessagePack Java 0.6.X 快速开始指南 - 安装
最新的 MessagePack 版本请参考:https://github.com/msgpack/msgpack-java 中的项目源代码。
HoneyMoose
2019/08/06
5020
MessagePack Java 0.6.X 不使用注解(annotations)来序列化
如果你不能添加 @Message 到你的定义对象中但是你还是希望进行序列化。你可以使用 register 方法来在类中启用序列化对象。
HoneyMoose
2019/08/08
2910
MessagePack Java Jackson Dataformat - 安装
本页面中的所有示例程序,请到代码库 https://github.com/cwiki-us-demo/serialize-deserialize-demo-java 中下载进行测试。
HoneyMoose
2019/08/09
4310
MessagePack Java Jackson 在不关闭输入流(input stream)的情况下反序列化多变量
com.fasterxml.jackson.databind.ObjectMapper 在读取输入流变量的时候默认的将会关闭输入流。
HoneyMoose
2019/08/12
4240
MessagePack Java Jackson 在不关闭输入流(input stream)的情况下反序列化多变量
com.fasterxml.jackson.databind.ObjectMapper 在读取输入流变量的时候默认的将会关闭输入流。
HoneyMoose
2019/08/10
6780
Java安全-反序列化-4-CC6
上一篇文章中通过AnnotationInvocationHandler#invoke方法来触发LazyMap#get方法,而AnnotationInvocationHandler这个类在高版本Java(8u71以后)进行了修改,导致该利用链无法利用。 这里讲另一个相对比较通用的Gadget:CommonCollections6,这个Gadget使用了另一个类org.apache.commons.collections.keyvalue.TiedMapEntry,该类在其hashCode方法中调用了getValue,而在getValue中调用了this.map.get,即可以调用LazyMap#get方法。
Naraku
2022/04/26
5100
Java安全-反序列化-4-CC6
MessagePack Java 0.6.X 不使用注解(annotations)来序列化
如果你不能添加 @Message 到你的定义对象中但是你还是希望进行序列化。你可以使用 register 方法来在类中启用序列化对象。
HoneyMoose
2019/08/07
4190
MessagePack Java Jackson Dataformat 不使用 str8 数据类型的序列化
老的 msgpack-java(例如 0.6.7)并不支持 MessagePack str8 数据类型。
HoneyMoose
2019/08/10
4250
【Netty】03-实战之序列化与反序列化协议
客户端与服务器端通讯,不能将对象进行直接传输的。通讯的本质为流传输,所以,我们可以将对象序列化成流进行传输。
envoke
2020/09/17
1.6K0
【Netty】03-实战之序列化与反序列化协议
Java安全-反序列化-3-CC1
如果想劫持一个对象内部的方法调用,需要用到java.reflect.Proxy#newProxyInstance
Naraku
2022/04/17
4210
Java安全-反序列化-3-CC1
MessagePack Java Jackson Dataformat - 列表(List)的序列化和反序列化
在本测试代码中,我们定义了一个 POJO 类,名字为 MessageData,你可以访问下面的链接找到有关这个类的定义。
HoneyMoose
2019/08/12
6020
Java安全之ROME反序列化
ROME 是用于 RSS 和 Atom 订阅的 Java 框架。 并根据 Apache 2.0 许可证开源。ROME 包括一组用于各种形式的联合供稿的解析器和生成器,以及用于从一种格式转换为另一种格式的转换器。 解析器可以为您提供特定于您要使用的格式的 Java 对象,或者为您提供通用的规范化 SyndFeed 类,该类使您可以处理数据而不必担心传入或传出的提要类型。
ph0ebus
2023/08/13
4520
Java安全-反序列化-2-CC
TransformedMap,⽤于对Map类型的对象做修饰,被修饰过的Map在添加新的元素时,将可以执⾏⼀个回调。 如下,传入变量innerMap,返回outerMap。outerMap在添加新元素时,keyTransformer是处理新元素的Key的回调,valueTransformer是处理新元素的Value的回调,处理后得到的返回值才会被添加进outerMap中
Naraku
2022/04/14
3470
Java安全-反序列化-2-CC
Java安全-反序列化-5-CC3
正常情况下,Java会根据配置项sun.boot.class.path和java.class.path中列举到的基础路径(这些路径是经过处理后的java.net.URL类)来寻找.class文件来加载,而这个基础路径有三种情况:
Naraku
2022/04/26
4370
Java安全-反序列化-5-CC3
Java安全之Hessian反序列化
Hessian是一个基于HTTP协议采用二进制格式传输的RPC服务框架,相对传统的SOAP web service,更轻捷。Hessian是Apache Dubbo在Java语言的实现,该框架还提供了Golang、Rust、Node.js 等多语言实现。Hessian 是一种动态类型、二进制序列化和 Web 服务协议,专为面向对象的传输而设计。
ph0ebus
2023/08/26
1K0
MessagePack Java Jackson 在不关闭输出流(output stream)的情况下序列化多变量
com.fasterxml.jackson.databind.ObjectMapper 在默认的情况下在写出输入后将会关闭输出流(output stream)。
HoneyMoose
2019/08/10
4620
MessagePack Java Jackson Dataformat - POJO 的序列化和反序列化
在本测试代码中,我们定义了一个 POJO 类,名字为 MessageData,你可以访问下面的链接找到有关这个类的定义。
HoneyMoose
2019/08/09
6130
推荐阅读
相关推荐
MessagePack Java 0.6.X 使用一个消息打包(message-packable)类
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档