关于C++解析问题 序列化与反序列化

noct 2014-07-18 12:01:17
先序列化了一个函数
如何在反序列化
看了半天google buffer proto 没弄明白

ClientCmdStream stream;
string sBin;
ConfCmdSerializer::SerializeDelGroupFileFromDB(eGroupType, nGroupID, sFileID, sBin);
stream<<ByteStream(sBin.c_str(), sBin.length());
m_pCoreObject->Invoke(MSG_DB_SENDDBMEDIAMESSAGE, stream.Serialize().c_str());
stream.Clear();

已经把SerializeDelGroupFileFromDB序列化成了sBin
如何 反序列化 调用这个里头的函数

...全文
225 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
noct 2014-07-18
  • 打赏
  • 举报
回复
引用 1 楼 book_soniced 的回复:
你列的代码干了以下事情: 1. 调用ConfCmdSerializer::SerializeDelGroupFileFromDB把eGroupType, nGroupID, sFileID序列化到sBin; 2. 把sBin转成ByteStream在序列化到stream; 3 调用rpc把stream发出去 你只需要反过来做就好了: 1 把收到的string转成stream; 2 从stream读出一个ByteStream 3 从ByteStream取出eGroupType, nGroupID, sFileID 流程是这样,因为你没有贴出全部代码无法给你具体的代码细节。 另外,序列化是针对数据而言,你说的序列化了一个函数是不对的。
void CBaseCmdSerializer::SerializeDelGroupFileFromDB(EGROUPTYPE eGroupType, long long nGroupID, const char *sFileID, string &sBin) { MDBMediaMessage mDBMessage; mDBMessage.set_edbmessagetype(EDBMSGTYPE_GROUPOPER); MGroupOperMessage* pGroupOperMsg = mDBMessage.mutable_mgroupopermsg(); pGroupOperMsg->set_egroupopertype(EGROUPOPERTYPE_FILE); pGroupOperMsg->set_egrouptype(eGroupType); MGroupFileMessage *pGroupFileMsg = pGroupOperMsg->mutable_mgroupfilemsg(); pGroupFileMsg->set_egroupfileoper(EGROUPFILEOPER_DEL); pGroupFileMsg->set_ngroupid(nGroupID); MGroupDelFileMessage *pGroupDelFileMsg = pGroupFileMsg->mutable_mgroupdelfilemsg(); pGroupDelFileMsg->set_sfileid(sFileID); mDBMessage.SerializeToString(&sBin); } 这个是详细的代码。还少什么? 求详细的反序列化代码!
book_soniced 2014-07-18
  • 打赏
  • 举报
回复
你列的代码干了以下事情: 1. 调用ConfCmdSerializer::SerializeDelGroupFileFromDB把eGroupType, nGroupID, sFileID序列化到sBin; 2. 把sBin转成ByteStream在序列化到stream; 3 调用rpc把stream发出去 你只需要反过来做就好了: 1 把收到的string转成stream; 2 从stream读出一个ByteStream 3 从ByteStream取出eGroupType, nGroupID, sFileID 流程是这样,因为你没有贴出全部代码无法给你具体的代码细节。 另外,序列化是针对数据而言,你说的序列化了一个函数是不对的。
book_soniced 2014-07-18
  • 打赏
  • 举报
回复
从string反序列化出MDBMediaMessage 就可以了啊

MDBMediaMessage mDBMessage;
mDBMessage.ParseFromString(sBin);
noct 2014-07-18
  • 打赏
  • 举报
回复
引用 3 楼 book_soniced 的回复:
下面的是伪代码,因为无法得知你的ClientCmdStream和ByteStream的实现和接口。

//1
ClientCmdStream stream(inputStr);

//2
ByteStream byteStream;
stream >> byteStream;

//3
std::string msg = byteStream.toStr()
MDBMediaMessage mDBMessage;
mDBMessage.ParseFromString(msg);
大神 我还是不懂啊 我应该如何 调用序列化的sBin 然后给他解析,反序列化到 新的函数中
book_soniced 2014-07-18
  • 打赏
  • 举报
回复
下面的是伪代码,因为无法得知你的ClientCmdStream和ByteStream的实现和接口。

//1
ClientCmdStream stream(inputStr);

//2
ByteStream byteStream;
stream >> byteStream;

//3
std::string msg = byteStream.toStr()
MDBMediaMessage mDBMessage;
mDBMessage.ParseFromString(msg);

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧