Ceph中的序列化
转自:https://www.ustack.com/blog/cephxuliehua/
encode(struct inode, bufferlist bl);decode(struct inode, bufferlist::iterator bl);
utime_t timestamp;inode_t inode;bufferlist bl;::encode(timetamp, bl)::encode(inode, bl);
bufferlist::iterator bl;::decode(timetamp, bl)::decode(inode, bl);
- __u8, __s8, char, bool
- ceph_le64, ceph_le32, ceph_le16,
- float, double,
- uint64_t, int64_t, uint32_t, int32_t, uint16_t, int16_t,
- string, char*
struct ceph_mds_request_head {__le64 oldest_client_tid;__le32 mdsmap_epoch;__le32 flags;__u8 num_retry, num_fwd;__le16 num_releases;__le32 op;__le32 caller_uid, caller_gid;__le64 ino;} __attribute__ ((packed));
WRITE_RAW_ENCODER(ceph_mds_request_head)
- ceph_mds_request_head结构体定义在include/ceph_fs.h
- WRITE_RAW_ENCODER(ceph_mds_request_head)语句位于include/types.h
- WRITE_RAW_ENCODER宏函数定义在include/encoding.h
template<class T>inline void encode_raw(const T& t, bufferlist& bl){bl.append((char*)&t, sizeof(t));}template<class T>inline void decode_raw(T& t, bufferlist::iterator &p){p.copy(sizeof(t), (char*)&t);}
- 序列化集合大小,
- 序列化集合内的所有元素
template<class T>inline void encode(const std::vector<T>& v, bufferlist& bl){__u32 n = v.size();encode(n, bl);for (typename std::vector<T>::const_iterator p = v.begin(); p != v.end(); ++p)encode(*p, bl);}
- pair, triple
- list, set, vector, map, multimap
- hash_map, hash_set
- deque
- 在类型内部现实encode方法,
- 将类型内部的encode方法重定义为全局方法。
class utime_t {struct {__u32 tv_sec, tv_nsec;} tv;void encode(bufferlist &bl) const {::encode(tv.tv_sec, bl);::encode(tv.tv_nsec, bl);}void decode(bufferlist::iterator &p) {::decode(tv.tv_sec, p);::decode(tv.tv_nsec, p);}};WRITE_CLASS_ENCODER(utime_t)
Ceph中的序列化的更多相关文章
- .NET中XML序列化的总结
[题外话] 以前虽然常用.NET中的序列化,但是常用的BinaryFormatter,也就是二进制文件的序列化,却鲜用XML的序列化.对于XML序列化,.NET中同样提供了一个非常方便的工具XmlSe ...
- C#中JSON序列化和反序列化
有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境…… 最近在写些调用他人接口的程序,用到了大量的JSON.XML序列化和反序列化,今天就来总结下json的序列化和反 ...
- Net中JSON序列化和反序列化处理(日期时间特殊处理)
0 缘由 笔者最近在web api端使用Json.Net进行序列化处理,而在调用端使用DataContractSerializer进行反序列化,遇到日期时间处理反序列化不成功[备注:笔者使用Net ...
- .net中对象序列化技术浅谈
.net中对象序列化技术浅谈 2009-03-11 阅读2756评论2 序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储 ...
- JavaScriptSerializer中日期序列化问题解决方案
JavaScriptSerializer中日期序列化问题解决方案 直接进入主题: class Student { public int age { get; set; } public DateTim ...
- 1 weekend110的复习 + hadoop中的序列化机制 + 流量求和mr程序开发
以上是,weekend110的yarn的job提交流程源码分析的复习总结 下面呢,来讲weekend110的hadoop中的序列化机制 1363157985066 13726230503 ...
- spring mvc3中JACKSON序列化日期格式的问题 - 墙头草的Java - BlogJava
body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...
- AFN中请求序列化的设置
最近遇到一个需求:要求从客户端传到服务器的参数是json字符串,于是我本能的用pod装了afn然后进行了request和response Serialization的相关设置 AFHTTPSessio ...
- 在Java中进行序列化和反序列化
对象序列化的目标是将对象保存在磁盘中,或者允许在网络中直接传输对象. 对象序列化允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久保存在磁盘上或者通过网络将这种二进制流传输 ...
随机推荐
- Nginx图片及样式文件不记录访问日志
1.Nginx作为web服务器是可直接在server配置文件中做如下配置: server { listen ; server_name www.fansik.com; access_log /data ...
- Android Integer.parseInt java.lang.NumberFormatException: Invalid int解决方法
解决方法: http获取的字符串minutes去空字符串处理minutes.replaceAll("\\D+","").replaceAll("\r& ...
- Android:日常学习笔记(6)——探究活动(3)
Android:日常学习笔记(6)——探究活动(3) 活动的生命周期 返回栈 Android中的活动是可以叠加的,我们每启动一个新活动,就会覆盖在原来的活动上,点击Back以后销毁最上面的活动,下面的 ...
- Python 开发者节省时间的 10 个小技巧
Python 是一个美丽的语言,可以激发用户对它的爱.所以如果你试图加入程序员行列,或者你有点厌倦C++,Perl,Java 和其他语言,我推荐你尝试Python. Python有很多吸引程序员的功能 ...
- Archimate
archimate语言提供了一种用于表示企业体系结构的图形化语言,包括策略,转换和迁移规划,以及架构的动机和基本原理.该标准的设计尽可能紧凑,但仍可用于大多数企业体系结构建模需求.下图显示了Archi ...
- VMWare虚拟机安装步骤
VMWare虚拟机安装 如果以前安装过VMware,则先检查是否卸载干净(注册表等) 一.首先下载VMware Workstation Pro,在这里提供一个下载链接:https://www.nocm ...
- 混淆Android JAR包的方法
http://blog.csdn.net/vurtne_ye/article/details/35599491 1)导出jar包 如何在eclipse上Android工程中导出jar包?google, ...
- python中初始化实例属性
虽然我们可以自由地给一个实例绑定各种属性,但是,现实世界中,一种类型的实例应该拥有相同名字的属性.例如,Person类应该在创建的时候就拥有 name.gender 和 birth 属性,怎么办? 在 ...
- java 程序的使用
Java程序可以在任何安装有Java平台的系统上运行,运行的时候语法如下: java -jar <program.jar> -jar这个参数是必须有的,后面跟你的java程序,例如我们 ...
- php数组函数-array_push()
array_push()函数将一个或多个元素插入数组的末尾(入栈). 提示:可以添加一个或者多个值. 注:即使您的数组有字符串键名,您所添加的元素将是数字键名. array_push(array,va ...