msgpack简介(续) 复杂的数据类型

复杂的类型 JavaBean里包括 List 和Bean类型

import java.io.Serializable;

import org.msgpack.annotation.MessagePackMessage;

@MessagePackMessage
public class User implements Serializable {

/**
*
*/
private static final long serialVersionUID = 1L;

public String username;
public int age;
}



import java.io.Serializable;
import java.util.List;

import org.msgpack.annotation.MessagePackMessage;

@MessagePackMessage
public class BeanMessage implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
public String str;
public List<Double> nums;
public User user;

}


测试类

import java.util.ArrayList;
import java.util.List;

import org.msgpack.MessagePack;

public class MessageMain {

/**
* @param args
*/
public static void main(String[] args) {
List<Double> nums = new ArrayList<Double>();
nums.add(0.05);
nums.add(0.01);

User user = new User();
user.username = "pluto418";
user.age = 24;

BeanMessage src = new BeanMessage();
src.str = "test";
src.nums = nums;
src.user = user;

// Serialize
byte[] raw = MessagePack.pack(src);

// Deserialize
BeanMessage dst = MessagePack.unpack(raw, BeanMessage.class);
System.out.println(dst.str + ":" + dst.nums);
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮你封装一个msgpack的模板类,用来存储多种数据。 首先,我们需要引入msgpack的头文件和相关命名空间: ```cpp #include <msgpack.hpp> using namespace msgpack; ``` 接下来,我们可以定义一个模板类,用来存储不同类型的数据: ```cpp template <typename... Args> class Msgpack { public: Msgpack(const Args&... args) { packer_.pack(args...); } const char* data() const { return buffer_.data(); } size_t size() const { return buffer_.size(); } private: buffer buffer_; packer<buffer> packer_; }; ``` 在这个模板类中,我们使用了变长模板参数来支持不同类型的数据。在构造函数中,我们使用了msgpackpack函数来序列化数据,并将序列化的结果存储在buffer中。在data和size函数中,我们分别提供了获取序列化结果和序列化结果长度的接口。 使用这个模板类非常简单,只需要传入不同类型的数据即可: ```cpp int main() { Msgpack<int, std::string> msg(42, "hello"); // 获取序列化结果和长度 const char* data = msg.data(); size_t size = msg.size(); // 反序列化数据 unpacked result = unpack(data, size); std::cout << "Type: " << result.get().type << std::endl; std::cout << "Value: " << result.get() << std::endl; return 0; } ``` 在这个例子中,我们将一个整数和一个字符串序列化到了msgpack格式的数据中,并获取了序列化结果和长度。然后,我们使用msgpack的unpack函数将序列化的数据反序列化,并输出了反序列化后的数据类型和值。 希望这个封装的模板类能够满足你的需求!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值