序列化反序列化

只要用到网络开发啊,就一定会用到序列化反序列化。

1,自定义结构体

struct test

{

int len;

int type;

char data[10];

}


test* data=(test*) buffer.

缺点:明文,只支持基本类型,不支持变长结构

2,在1的基础上,自定义一个缓冲类,存放一个消息。把消息写入缓冲,通过支持string, vector, map, userdata等,来实现各种结构体格式。

inline BytesBuffer& operator<<(BytesBuffer& buffer, const std::basic_string<wchar_t>& obj)
{
    uint16_t  dwLen = (uint16_t)obj.size();
    assert(dwLen < 1024);
    buffer << dwLen;
    if(dwLen < 1024)
    {
        for(size_t i = 0; i < dwLen; ++i)
        {
            buffer << obj[i];
        }
    }
    return buffer;
}

缺点:明文,每自定义一个结构体,都要定义一套读写机制。

3,用google buffer. 定义一个结构体,就可以自动生成对应的序列化反序列化类,而且使用起来方便,逻辑清楚。

有时间的话,自己可以把2的自动反射方面强化下,还有考虑点加密,实现个简易版的google buffer.


4,用了序列化类后,代码里还是需要定义结构体,这样的话,有些结构体和序列化类就重复定义了,怎么避免??

一种方法是用原始的1方案,用基础类型的结构体,char数组,而不用变长的string,通过强转来取得消息。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值