zl程序教程

您现在的位置是:首页 >  后端

当前栏目

基于ProtobufC++serialize到char*的实现方法分析

C++方法 实现 分析 基于 char Protobuf serialize
2023-06-13 09:14:53 时间

protobuf的Demo程序是

C++版本的protubuf有几种serialize和unSerialize的方法:

方法一:

官方demo程序采用的是

复制代码代码如下:

 //Writethenewaddressbookbacktodisk.

   fstreamoutput(argv[1],ios::out|ios::trunc|ios::binary);

   if(!address_book.SerializeToOstream(&output)){

     cerr<<"Failedtowriteaddressbook."<<endl;

     return-1;

   }

 

 //Readtheexistingaddressbook.

   fstreaminput(argv[1],ios::in|ios::binary);

   if(!input){

     cout<<argv[1]<<":Filenotfound. Creatinganewfile."<<endl;

   }elseif(!address_book.ParseFromIstream(&input)){

     cerr<<"Failedtoparseaddressbook."<<endl;

     return-1;

   }


上面采用的是fstream,把数据序列(反序列)打磁盘文件中。

 

而如果想序列到char*,并且通过socket传输,则可以使用:

方法二:

复制代码代码如下:

intsize=address_book.ByteSize();

void*buffer=malloc(size);

address_book.SerializeToArray(buffer,size);

方法三:

复制代码代码如下:
使用ostringstream,

std::ostringstreamstream;

address_book.SerializeToOstream(&stream);

stringtext=stream.str();

char*ctext=string.c_str();