ceph中的序列化
来源:互联网 发布:钱宝数据助手新手套餐 编辑:程序博客网 时间:2024/06/06 19:00
std::map< string, bufferlist > 序列化map到bufferlist中
encode(map A,bufferlist B)
1.求出map中的元素个数。 count = A.size()
2.把A元素个数序列化到B中。见整型的序列化 B->count,
3.对A中的元素逐个再次调用encode,序列化到bufferlist B中
p = A.begin()encode(p->first, B)encode(p->second, B)
这里的p->first 是string类型,p->second是bufferlist类型。
(见下面string的序列化,bufferlist序列化)
string类型的序列化:
1.求出string的长度。
__u32 len = s.length();
2.把string的长度先序列化到bufferlist中。
encode(len, bl);
3.把string的数据部分追加到bufferlist中。
if (len)
bl.append(s.data(), len);
整型类型的序列化:
#define WRITE_INTTYPE_ENCODER(type, etype) \ inline void encode(type v, bufferlist& bl, uint64_t features=0) { \ ceph_##etype e; \ e = v; \ encode_raw(e, bl); \ } \ inline void decode(type &v, bufferlist::iterator& p) { \ ceph_##etype e; \ decode_raw(e, p); \ v = e; \ }WRITE_INTTYPE_ENCODER(uint64_t, le64)template<class T>inline void encode_raw(const T& t, bufferlist& bl){ bl.append((char*)&t, sizeof(t));}
将整型强制转换成字符类型,然后追加到bufferlist中。
bufferlist的序列化到bufferlist中:
inline void encode(const bufferlist& s, bufferlist& bl) { __u32 len = s.length(); encode(len, bl); bl.append(s);}
1.先获取源bufferlist的长度
2.然后将源bufferlist的长度先序列化到目标bufferlist
3.最后把源bufferlist中的数据追加到目标bufferlist中。
总的来说,ceph中的序列化基本步骤:选获取源目标的大小,将大小先序列化到bufferlist中(整型除外),
然后再把真实数据追加到bufferlist中。(复杂类型通过递归的方式序列化到bufferlist中)
该序列化除了基本的数据类型都提供了encode/decode,需要跨网络传输的自定义类型(类)都提供了encode/decode。
- Ceph中的序列化
- ceph中的序列化
- ceph 中的performance counter
- ceph存储 UML学习---序列图
- ceph存储 Shell中的&&、 ||、 ()和 {}
- ceph rgw中的md_config_obs_t类
- paxos在ceph中的应用
- ceph中的信号处理线程
- ceph中的radosgw相关总结
- .Net中的序列化
- .NET中的序列化
- c#中的序列化
- .NET中的序列化
- .NET中的序列化
- .NET中的序列化
- .NET中的序列化
- java中的序列化
- Silverlight中的序列化
- vs添加lib等依赖项
- 怎样用捷速PDF编辑器修改PDF文档
- 字符统计
- apache设置不同端口监听不同目录
- 在Ubuntu 14.04 64bit下编译安装rtmpdump并调试输出
- ceph中的序列化
- Integer.getInteger和Integer.valueOf区别
- Environment 类
- 16进制字符串转为10进制
- Eval相关用法
- [UIApplication sharedApplication].keyWindow 添加视图无效,解决方案。
- Android Http 简单介绍
- Android_面试题
- 单点登录 Ucenter 分析