msgpack java在java/c和go中序列化的区别

下次自动登录
现在的位置:
& 综合 & 正文
对象序列化类库MsgPack介绍
http://msgpack.org/releases/cpp/msgpack-0.5.7.tar.gz
msgpack-0.5.7.tar.gz
msgpack-0.5.7
./configure
sudo make install
libmsgpack-dev
#include &msgpack.hpp&
#include &vector&
#include &string&
#include &iostream&
int main()
std::vector _vecS
_vecString.push_back("Hello");
_vecString.push_back("world");
msgpack::sbuffer _
msgpack::pack(_sbuffer, _vecString);
std::cout && _sbuffer.data() && std::
msgpack::unpack(&msg, _sbuffer.data(), _sbuffer.size());
msgpack::object obj = msg.get();
std::cout && obj && std::
// convert
std::vector _vecRS
obj.convert(&_vecRString);
for(size_t i = 0; i & _vecRString.size(); ++i)
std::cout && _vecRString[i] && std::
结果就不贴了,大家自己运行下便知。
using stream
#include &msgpack.hpp&
#include &vector&
#include &string&
#include &iostream&
int main()
// msgpack stream
// use msgpack::packer to pack multiple objects.
msgpack::sbuffer buffer_;
msgpack::packer pack_(&buffer_);
pack_.pack(std::string("this is 1st string"));
pack_.pack(std::string("this is 2nd string"));
pack_.pack(std::string("this is 3th string"));
// use msgpack::unpacker to unpack multiple objects.
msgpack::unpacker unpack_;
unpack_.reserve_buffer(buffer_.size());
memcpy(unpack_.buffer(), buffer_.data(), buffer_.size());
unpack_.buffer_consumed(buffer_.size());
msgpack::unpacked result_;
while (unpack_.next(&result_))
std::cout && result_.get() && std::
使用sbuffer stream序列化多个对象。
如何序列化自定义数据结构
msgpack支持序列化/反序列化自定义数据结构,只需要简单的使用MSGPACK_DEFINE宏即可。
##include &msgpack.hpp&
#include &vector&
#include &string&
class my_class
std::string my_
std::vector vec_
std::vector vec_
MSGPACK_DEFINE(my_string, vec_int, vec_string);
int main()
std::vector my_class_
// add some data
msgpack::pack(buffer, my_class_vec);
msgpack::unpack(&msg, buffer.data(), buffer.size());
msgpack::object obj = msg.get();
std::vector my_class_vec_r;
obj.convert(&my_class_vec_r);
这样我们就可以在网络通讯等地方可以使用msgpack来序列化我们的数据结构,完全可以做到安全高效,并且可以在接收方使用别的语言来处理结构做逻辑。完全是 多种语言-多种语言,现在支持的语言如下:
Ruby Perl Python C/C++ Java PHP JS OC C# Lua Scala D Haskell Erlang Ocaml Smallalk GO LabVIEW
完全够我们使用了,当然了,如果没有你要的语言,建议看源代码模仿一个。
关于性能测试结果可以查看:linux使用msgpack及测试
&&&&推荐文章:
【上篇】【下篇】
">vector<vector>&&&&MessagePack是一个基于二进制高效的对象序列化类库,可用于跨语言通信。它可以像JSON那样,在许多种语言之间交换结构对象;但是它比JSON更快速也更轻巧。支持Python、Ruby、Java、C/C++等众多语言。比Google Protocol Buffers还要快4倍。
&&&&代码地址:/msgpack/msgpack
&&&&官网地址:http://msgpack.org/
& &MessagePack的优势是速度比较快,支持众多语言,便于不同语言开发的系统之间交换数据。我在把对象序列化都转换成了字符串形式,是为了把对象存储到缓存中。我们日常项目中使用的数据形式包括对象、List、Set和Map,因此主要把这几种类型的数据进行了序列化及反序列化,支持对象中包含List、Set和Map。
首先在项目的pom文件中引入:
&dependency&
&groupId&org.msgpack&/groupId&
&artifactId&msgpack&/artifactId&
&version&0.6.12&/version&
&/dependency&
代码MsgpackTest:
package&com.nettm.
import&java.io.IOE
import&java.io.S
import&java.util.ArrayL
import&java.util.HashM
import&java.util.HashS
import&java.util.L
import&java.util.M
import&java.util.S
import&mons.codec.binary.Base64;
import&org.msgpack.MessageP
import&org.msgpack.template.SetT
import&org.msgpack.template.T
import&org.msgpack.template.T
import&org.testng.A
import&org.testng.annotations.AfterT
import&org.testng.annotations.BeforeT
import&org.testng.annotations.T
public&class&MsgpackTest&{
&&&&private&long&
&&&&private&MessagePack&
&&&&@BeforeTest
&&&&public&void&beforeTest()&{
&&&&&&&&time&=&System.currentTimeMillis();
&&&&&&&&msgpack&=&new&MessagePack();
&&&&&&&&msgpack.register(CustomItemDto.class);
&&&&&&&&msgpack.register(CustomCategoryDto.class);
&&&&@AfterTest
&&&&public&void&afterTest()&{
&&&&&&&&msgpack.unregister();
&&&&&&&&System.out.println(System.currentTimeMillis()&-&time);
&&&&@Test(invocationCount&=&1,&threadPoolSize&=&1)
&&&&public&void&testObject()&{
&&&&&&&&CustomItemDto&val&=&new&CustomItemDto();
&&&&&&&&val.setId(10L);
&&&&&&&&val.setItemCode(&&);
&&&&&&&&val.setItemDespositPrice(32.45);
&&&&&&&&val.setItemMemo(null);
&&&&&&&&val.setItemName(&张金&);
&&&&&&&&val.setItemPrice(89.02);
&&&&&&&&val.setSort(10);
&&&&&&&&String&a&=&serializationObject(val);
&&&&&&&&CustomItemDto&newValue&=&deserializationObject(a,&CustomItemDto.class);
&&&&&&&&Assert.assertEquals(val.getId(),&newValue.getId());
&&&&@Test(invocationCount&=&1,&threadPoolSize&=&1)
&&&&public&void&testList()&{
&&&&&&&&List&CustomItemDto&&lst&=&new&ArrayList&CustomItemDto&();
&&&&&&&&for&(int&i&=&0;&i&&&10;&i++)&{
&&&&&&&&&&&&CustomItemDto&val&=&new&CustomItemDto();
&&&&&&&&&&&&val.setId(10L);
&&&&&&&&&&&&val.setItemCode(&&);
&&&&&&&&&&&&val.setItemDespositPrice(32.45);
&&&&&&&&&&&&val.setItemMemo(null);
&&&&&&&&&&&&val.setItemName(&张金&);
&&&&&&&&&&&&val.setItemPrice(89.02);
&&&&&&&&&&&&val.setSort(10);
&&&&&&&&&&&&lst.add(val);
&&&&&&&&String&a&=&serializationList(lst,&CustomItemDto.class);
&&&&&&&&List&CustomItemDto&&newValue&=&deserializationList(a,
&&&&&&&&&&&&&&&&CustomItemDto.class);
&&&&&&&&Assert.assertEquals(lst.size(),&newValue.size());
&&&&@Test(invocationCount&=&1,&threadPoolSize&=&1)
&&&&public&void&testBean()&{
&&&&&&&&List&CustomCategoryDto&&lst&=&new&ArrayList&CustomCategoryDto&();
&&&&&&&&for&(int&j&=&0;&j&&&10;&j++)&{
&&&&&&&&&&&&CustomCategoryDto&dto&=&new&CustomCategoryDto();
&&&&&&&&&&&&dto.setCategoryCode(&ABCD_001&);
&&&&&&&&&&&&dto.setCategoryName(&呼吸系统&);
&&&&&&&&&&&&for&(int&i&=&0;&i&&&10;&i++)&{
&&&&&&&&&&&&&&&&CustomItemDto&val&=&new&CustomItemDto();
&&&&&&&&&&&&&&&&val.setId(10L);
&&&&&&&&&&&&&&&&val.setItemCode(&&);
&&&&&&&&&&&&&&&&val.setItemDespositPrice(32.45);
&&&&&&&&&&&&&&&&val.setItemMemo(null);
&&&&&&&&&&&&&&&&val.setItemName(&张金&);
&&&&&&&&&&&&&&&&val.setItemPrice(89.02);
&&&&&&&&&&&&&&&&val.setSort(10);
&&&&&&&&&&&&&&&&dto.getCustomItemList().add(val);
&&&&&&&&&&&&}
&&&&&&&&&&&&for&(int&i&=&0;&i&&&10;&i++)&{
&&&&&&&&&&&&&&&&CustomItemDto&val&=&new&CustomItemDto();
&&&&&&&&&&&&&&&&val.setId(Long.parseLong(String.valueOf(i)));
&&&&&&&&&&&&&&&&val.setItemCode(&&);
&&&&&&&&&&&&&&&&val.setItemDespositPrice(32.45);
&&&&&&&&&&&&&&&&val.setItemMemo(null);
&&&&&&&&&&&&&&&&val.setItemName(&张金&);
&&&&&&&&&&&&&&&&val.setItemPrice(89.02);
&&&&&&&&&&&&&&&&val.setSort(10);
&&&&&&&&&&&&&&&&dto.getCustomItemSet().add(val);
&&&&&&&&&&&&}
&&&&&&&&&&&&for&(int&i&=&0;&i&&&10;&i++)&{
&&&&&&&&&&&&&&&&CustomItemDto&val&=&new&CustomItemDto();
&&&&&&&&&&&&&&&&val.setId(Long.parseLong(String.valueOf(i)));
&&&&&&&&&&&&&&&&val.setItemCode(&&);
&&&&&&&&&&&&&&&&val.setItemDespositPrice(32.45);
&&&&&&&&&&&&&&&&val.setItemMemo(null);
&&&&&&&&&&&&&&&&val.setItemName(&张金&);
&&&&&&&&&&&&&&&&val.setItemPrice(89.02);
&&&&&&&&&&&&&&&&val.setSort(10);
&&&&&&&&&&&&&&&&dto.getCustomItemMap().put(String.valueOf(i),&val);
&&&&&&&&&&&&}
&&&&&&&&&&&&lst.add(dto);
&&&&&&&&String&a&=&serializationList(lst,&CustomCategoryDto.class);
&&&&&&&&List&CustomCategoryDto&&newValue&=&deserializationList(a,
&&&&&&&&&&&&&&&&CustomCategoryDto.class);
&&&&&&&&Assert.assertEquals(lst.size(),&newValue.size());
&&&&@Test(invocationCount&=&1,&threadPoolSize&=&1)
&&&&public&void&testMap()&{
&&&&&&&&Map&String,&CustomItemDto&&map&=&new&HashMap&String,&CustomItemDto&();
&&&&&&&&for&(int&i&=&0;&i&&&10;&i++)&{
&&&&&&&&&&&&CustomItemDto&val&=&new&CustomItemDto();
&&&&&&&&&&&&val.setId(10L);
&&&&&&&&&&&&val.setItemCode(&&);
&&&&&&&&&&&&val.setItemDespositPrice(32.45);
&&&&&&&&&&&&val.setItemMemo(null);
&&&&&&&&&&&&val.setItemName(&张金&);
&&&&&&&&&&&&val.setItemPrice(89.02);
&&&&&&&&&&&&val.setSort(10);
&&&&&&&&&&&&map.put(new&ObjectId().toString(),&val);
&&&&&&&&String&a&=&serializationMap(map,&CustomItemDto.class);
&&&&&&&&Map&String,&CustomItemDto&&newValue&=&deserializationMap(a,
&&&&&&&&&&&&&&&&CustomItemDto.class);
&&&&&&&&Assert.assertEquals(map.size(),&newValue.size());
&&&&@Test(invocationCount&=&1,&threadPoolSize&=&1)
&&&&public&void&testSet()&{
&&&&&&&&Set&CustomItemDto&&set&=&new&HashSet&CustomItemDto&();
&&&&&&&&for&(int&i&=&0;&i&&&10;&i++)&{
&&&&&&&&&&&&CustomItemDto&val&=&new&CustomItemDto();
&&&&&&&&&&&&val.setId(Long.parseLong(String.valueOf(i)));
&&&&&&&&&&&&val.setItemCode(&&);
&&&&&&&&&&&&val.setItemDespositPrice(32.45);
&&&&&&&&&&&&val.setItemMemo(null);
&&&&&&&&&&&&val.setItemName(&金星&);
&&&&&&&&&&&&val.setItemPrice(89.02);
&&&&&&&&&&&&val.setSort(10);
&&&&&&&&&&&&set.add(val);
&&&&&&&&String&a&=&serializationSet(set,&CustomItemDto.class);
&&&&&&&&Set&CustomItemDto&&newValue&=&deserializationSet(a,&CustomItemDto.class);
&&&&&&&&Assert.assertEquals(set.size(),&newValue.size());
&&&&private&&T&extends&Serializable&&String&serializationObject(T&obj)&{
&&&&&&&&byte[]&b&=&
&&&&&&&&try&{
&&&&&&&&&&&&b&=&msgpack.write(obj);
&&&&&&&&}&catch&(IOException&e)&{
&&&&&&&&&&&&e.printStackTrace();
&&&&&&&&return&new&String(new&Base64().encode(b));
&&&&private&&T&extends&Serializable&&T&deserializationObject(String&obj,
&&&&&&&&&&&&Class&T&&clazz)&{
&&&&&&&&T&t&=&
&&&&&&&&byte[]&bytes&=&new&Base64().decode(obj.getBytes());
&&&&&&&&try&{
&&&&&&&&&&&&t&=&msgpack.read(bytes,&clazz);
&&&&&&&&}&catch&(IOException&e)&{
&&&&&&&&&&&&e.printStackTrace();
&&&&&&&&return&t;
&&&&private&&T&extends&Serializable&&String&serializationList(List&T&&obj,
&&&&&&&&&&&&Class&T&&clazz)&{
&&&&&&&&byte[]&b&=&
&&&&&&&&try&{
&&&&&&&&&&&&b&=&msgpack.write(obj);
&&&&&&&&}&catch&(IOException&e)&{
&&&&&&&&&&&&e.printStackTrace();
&&&&&&&&return&new&String(new&Base64().encode(b));
&&&&private&&T&extends&Serializable&&List&T&&deserializationList(String&obj,
&&&&&&&&&&&&Class&T&&clazz)&{
&&&&&&&&Template&T&&elementTemplate&=&msgpack.lookup(clazz);
&&&&&&&&Template&List&T&&&listTmpl&=&Templates.tList(elementTemplate);
&&&&&&&&List&T&&t&=&
&&&&&&&&byte[]&bytes&=&new&Base64().decode(obj.getBytes());
&&&&&&&&try&{
&&&&&&&&&&&&t&=&msgpack.read(bytes,&listTmpl);
&&&&&&&&}&catch&(IOException&e)&{
&&&&&&&&&&&&e.printStackTrace();
&&&&&&&&return&t;
&&&&private&&T&extends&Serializable&&String&serializationMap(
&&&&&&&&&&&&Map&String,&T&&obj,&Class&T&&clazz)&{
&&&&&&&&byte[]&b&=&
&&&&&&&&try&{
&&&&&&&&&&&&b&=&msgpack.write(obj);
&&&&&&&&}&catch&(IOException&e)&{
&&&&&&&&&&&&e.printStackTrace();
&&&&&&&&return&new&String(new&Base64().encode(b));
&&&&private&&T&extends&Serializable&&Map&String,&T&&deserializationMap(
&&&&&&&&&&&&String&obj,&Class&T&&clazz)&{
&&&&&&&&Template&T&&elementTemplate&=&msgpack.lookup(clazz);
&&&&&&&&Template&Map&String,&T&&&listTmpl&=&Templates.tMap(Templates.TString,
&&&&&&&&&&&&&&&&elementTemplate);
&&&&&&&&Map&String,&T&&t&=&
&&&&&&&&byte[]&bytes&=&new&Base64().decode(obj.getBytes());
&&&&&&&&try&{
&&&&&&&&&&&&t&=&msgpack.read(bytes,&listTmpl);
&&&&&&&&}&catch&(IOException&e)&{
&&&&&&&&&&&&e.printStackTrace();
&&&&&&&&return&t;
&&&&private&&T&extends&Serializable&&String&serializationSet(Set&T&&obj,
&&&&&&&&&&&&Class&T&&clazz)&{
&&&&&&&&Template&T&&elementTemplate&=&msgpack.lookup(clazz);
&&&&&&&&byte[]&b&=&
&&&&&&&&try&{
&&&&&&&&&&&&b&=&msgpack.write(obj,&new&SetTemplate&T&(elementTemplate));
&&&&&&&&}&catch&(IOException&e)&{
&&&&&&&&&&&&e.printStackTrace();
&&&&&&&&return&new&String(new&Base64().encode(b));
&&&&private&&T&extends&Serializable&&Set&T&&deserializationSet(String&obj,
&&&&&&&&&&&&Class&T&&clazz)&{
&&&&&&&&Template&T&&elementTemplate&=&msgpack.lookup(clazz);
&&&&&&&&Set&T&&t&=&
&&&&&&&&byte[]&bytes&=&new&Base64().decode(obj.getBytes());
&&&&&&&&try&{
&&&&&&&&&&&&t&=&msgpack.read(bytes,&new&SetTemplate&T&(elementTemplate));
&&&&&&&&}&catch&(IOException&e)&{
&&&&&&&&&&&&e.printStackTrace();
&&&&&&&&return&t;MessagePack(以下简称)一个基于二进制的对象,可用于跨语言通信。它可以像JSON那样,在许多种语言之间交换结构对象;但是它比JSON更快速也更轻巧。支持、Ruby、、C/C&#43;&#43;等众。比Google
Protocol Buffers还要快4倍。
& require ‘msgpack’
& msg = [1,2,3].to_msgpack& #=& “\x93\x01\x02\x03″
& MessagePack.unpack(msg)&& #=& [1,2,3]
以上摘自oschina介绍。
msgpack官方主页:
github主页:
因我只使用C&#43;&#43;版本,故只下载了CPP部分,大家请按需下载。
源码安装msgpack
打开终端下载msgpac 4 cpp最新版本0.5.7
wget http://msgpack.org/releases/cpp/msgpack-0.5.7.tar.gz
tar zxvf msgpack-0.5.7.tar.gz
进入解压后的文件夹中进行安装
cd msgpack-0.5.7
./configure
sudo make install
当然了,你也可以使用和svn直接抓取源代码进行编译,不过需要安装工具。
自动安装msgpack
apt-get install libmsgpack-dev
(安装过程中会将头文件拷贝到 /usr/local/include/ 库文件拷贝到/usr/local/lib/)
安装好了,我们直接使用用它看看效果。
直接包含msgpack.hpp即可使用。
simple using:
#include &msgpack.hpp&
#include &vector&
#include &string&
#include &iostream&
int main()
std::vector&std::string& _vecString;
_vecString.push_back(&Hello&);
_vecString.push_back(&world&);
msgpack::sbuffer _sbuffer;
msgpack::pack(_sbuffer, _vecString);
std::cout && _sbuffer.data() && std::endl;
msgpack::unpacked msg;
msgpack::unpack(&msg, _sbuffer.data(), _sbuffer.size());
msgpack::object obj = msg.get();
std::cout && obj && std::endl;
// convert
std::vector&std::string& _vecRString;
obj.convert(&_vecRString);
for(size_t i = 0; i & _vecRString.size(); ++i)
std::cout && _vecRString[i] && std::endl;
挜Hello&#59005;orld
[&Hello&, &world&]
using stream:
#include &msgpack.hpp&
#include &vector&
#include &string&
#include &iostream&
int main()
// msgpack stream
// use msgpack::packer to pack multiple objects.
msgpack::sbuffer buffer_;
msgpack::packer pack_(&buffer_);
pack_.pack(std::string(&this is 1st string&));
pack_.pack(std::string(&this is 2nd string&));
pack_.pack(std::string(&this is 3th string&));
// use msgpack::unpacker to unpack multiple objects.
msgpack::unpacker unpack_;
unpack_.reserve_buffer(buffer_.size());
memcpy(unpack_.buffer(), buffer_.data(), buffer_.size());
unpack_.buffer_consumed(buffer_.size());
msgpack::unpacked result_;
while (unpack_.next(&result_))
std::cout && result_.get() && std::endl;
使用sbuffer stream多个对象。
如何自定义数据结构
msgpack支持序列化/自定义,只需要简单的使用MSGPACK_DEFINE宏即可。
##include &msgpack.hpp&
#include &vector&
#include &string&
class my_class
std::string my_string;
std::vector vec_int;
std::vector vec_string;
MSGPACK_DEFINE(my_string, vec_int, vec_string);
int main()
std::vector&my_class& my_class_vec;
// add some data
msgpack::sbuffer buffer;
msgpack::pack(buffer, my_class_vec);
msgpack::unpacked msg;
msgpack::unpack(&msg, buffer.data(), buffer.size());
msgpack::object obj = msg.get();
std::vector&my_class& my_class_vec_r;
obj.convert(&my_class_vec_r);
这样我们就可以在网络通讯等地方可以使用msgpack来序列化我们的数据结构,完全可以做到安全,并且可以在接收方使用别的语言来处理结构做逻辑。完全是
多种语言-多种语言,现在支持的语言如下:
Ruby Perl Python C/C&#43;&#43; Java&&JS OC C# Lua&&D
Haskell Erlang Ocaml Smallalk&&LabVIEW
完全够我们使用了,当然了,如果没有你要的语言,建议看源代码模仿一个。
关于性能结果可以查看:
本文已收录于以下专栏:
相关文章推荐
#Objective-C中最受瞩目库
[链接](/languages/Objective-C/most_watched)
* [three20](https...
MessagePack(以下简称MsgPack)一个基于二进制高效的对象序列化类库,可用于跨语言通信。它可以像JSON那样,在许多种语言之间交换结构对象;但是它比JSON更快速也更轻巧。支持Pytho...
http://msgpack.org/
msgpack介绍
msgpack是一个串行化的第三方库,支持多种语言绑定,同类的软件还有boost的Serialization, ...
转自:http://www.cppfans.org/1410.html
MessagePack(以下简称MsgPack)一个基于二进制高效的对象序列化类库,可用于跨语言通信。它可以像JSON那样...
https://www.cppfans.org/1410.html
MessagePack(以下简称MsgPack)一个基于二进制高效的对象序列化类库,可用于跨语言通信。它可以像JSON那样...
MessagePack is an efficient binary serialization format. It lets you exchange data among multiple la...
msgpack,json,serialize
打包10000次
长度50,62,87
耗时9,95ms,17.45ms,8.85ms
耗时14.76ms,23.93ms,...
1.下载msgpack
/msgpack/msgpack-c/tree/cpp-2.1.1
2.解压进入工程目录打开vs工程
编译生成,默认是生成...
最近弄 Redis ,涉及数据序列化存储的问题,对比了:JSON, Serialize, Msgpack, Hprose 四种方式测试平台:
1. 对序列化后的字符串长度对比
2. 序列化速度对比...
他的最新文章
讲师:汪剑
讲师:刘道宽
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)对于无符号整型:
-----------&&&& &128,则直接1个字节;
----------&&&& [128,255],& 则{0xcc, N}& 2个字节表示
--------------[256,65535], 则{0xcd, N} 3个字节表示。(因为N介于[256,65535], 所以需要2个字节; 总共3个字节)
--------------[6-1]&&& {0xce, N}--------------5个字节
--------------& uint32_max时,{0xcf,& N}----------9个字节。
从这里看, 对于较小&#20540;,有压缩效果, 否则pack之后可能长度比原&#20540;更长。 这里的0xcc, 0xcd, 0xce, 0xcf高位都为1,同时表示后面还有多少个字节时用来表示同一个整数的。
对于有符号整型, 稍微更复杂一些,前置字节以0xdX开头。
msgpack的序列化最终都归结到基本类型, 如bool, char, int, double等; 在msg/type/下提供了list、string、set、map、queue的支持。
因此, 如果使用了第三方容器, 且自己的类又封装了该第三方容器, 则该类不能被msgpack序列化。
对自定义类的序列化支持, 需要使用宏 MSGPACK_DEFINE(member1, member2, ...) 的形式, 且: member必须为上述的基本类型,或者由基本类型组合得到的类且该类有MSGPACK_DEFINE的类型。
type定死了, 比如之前提到的0xcc, 0xcd等。
对于用户自定义类型,应该就是Raw bytes,length表示raw bytes的长度, 后续时该对象序列化的具体内容。
msgpack无法反射。 无法从一段buffer中自动反序列化得到正确的对象。 调用者必须明确指定类型才能反序列化成功。
msgpack的通常顺序是反序列化得到一个msgpack::obj, 然后再主动convert为用户指定的类型。
protobuf压缩比msgpack好。 且更方便灵活。 protobuf序列化性能应该稍差,因为protobuf的varint比msgpack的复杂。
protobuf自动生成代码有利:节省时间, skema足够灵活; 有弊:某些接口功能不够灵活或者缺接口。
msgpack只需要在类中加一个宏即可实现序列化支持。(也是有限制的,见第一个标红段)
上述两图片来自:
/open-source/1618388.html
本文已收录于以下专栏:
相关文章推荐
MessagePack(以下简称MsgPack)一个基于二进制高效的对象序列化类库,可用于跨语言通信。它可以像JSON那样,在许多种语言之间交换结构对象;但是它比JSON更快速也更轻巧。支持Pytho...
方法1 . 对于自定义数据,想通过 msgpack 打包,只需要加上 MSGPACK_DEFINE 宏 (对于版本 v1.1.x - v1.4.x), 例如e.g 1:struct MyPoint {...
转自:http://www.cppfans.org/1410.html
MessagePack(以下简称MsgPack)一个基于二进制高效的对象序列化类库,可用于跨语言通信。它可以像JSON那样...
http://msgpack.org/
msgpack介绍
msgpack是一个串行化的第三方库,支持多种语言绑定,同类的软件还有boost的Serialization, ...
msgpack,json,serialize
打包10000次
长度50,62,87
耗时9,95ms,17.45ms,8.85ms
耗时14.76ms,23.93ms,...
关于Msgpack官网上是这么说的,It&#39;s like JSON.but fast and small.
Msgpack0.6.12 java版使用总结:
依赖包:javassist-3.18.1-G...
1,今天在hacknews上看到很多人对messagepack的争论。首先了解什么是MessagePack:MessagePack is a binary-based efficient object...
php implode/explode, serialize, json, msgpack 性能对比
由于implode/explode不适合使用复杂的结构,因此常用的为serialize,json,...
啥是序列化?
序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。
为啥要序列化?
  1、以某种存储形式...
最近一直在想如果让我自己来做一个服务化框架出来,该实现些什么功能,具体该怎么去做这样的问题,数据序列化是一个重要的模块,故此有意对常见的一些开源序列化框架做一个比较!
我个人对Hessian、Jav...
他的最新文章
讲师:汪剑
讲师:刘道宽
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 msgpack java 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信