protobuf 学习总结——protobuf 简单使用

1、protobuf 安装

安装好的目录如下:

protobuf-2.4.1/
|-- bin
|-- include
`-- lib

2、创建一个proto文件

package PAY;

message Person              
{
    optional int32 age = 1;
    optional bytes name = 2;
}

3、创建write.cpp ,用于将对象序列化到文件

#include <iostream>
#include <fstream>
#include "pay.pb.h"
using namespace std;

int main()
{
  PAY::Person person;
  person.set_age(10);
  person.set_name("jack");

  fstream out("myfile.txt", ios::binary | ios::out | ios::trunc);
  if(!out)
  {
    cerr << "open file myfile failed!\n";
    return -1;
  }

  if (!person.SerializeToOstream(&out))
  {
    cerr << "write error!\n";
    return -1;
  }
}                                                                

4、创建read.cpp,用于从文件反序列化对象

#include <iostream>
#include <fstream>
#include "pay.pb.h"
using namespace std;

int main()
{
  PAY::Person person;

  fstream in("myfile.txt", ios::binary | ios::in);
  if (!person.ParseFromIstream(&in))
  {
    cout << "read error" << endl;
    return -1;
  }

  cout << person.age() << endl;
  cout << person.name() << endl;
}                                                 

5、创建makefile 文件

TARGET=libpay.a                                                                         
WRITE=write
READ=read

OBJ = pay.pb.o

$(shell rm -f *.cc *.h)

PROTOBUF_INCL = -I./protobuf-2.4.1/include
PROTOBUF_LIB = -L./protobuf-2.4.1/lib -lprotobuf

all: $(TARGET) $(WRITE) $(READ)

clean:
  rm -f $(TARGET) $(WRITE) $(READ) $(OBJ) pay.pb.h pay.pb.cc

install:

pay.pb.o:pay.pb.cc
  g++ -c -ggdb3 $(PROTOBUF_INCL) $<

$(TARGET): $(OBJ)
  ar -curv $@ $?
  ranlib $@

$(WRITE):write.cpp
  g++ -ggdb3 -o $@ $^ pay.pb.cc $(PROTOBUF_INCL) $(PROTOBUF_LIB)

$(READ):read.cpp
  g++ -ggdb3 -o $@ $^ pay.pb.cc $(PROTOBUF_INCL) $(PROTOBUF_LIB)

pay.pb.cc:pay.proto
  LD_LIBRARY_PATH+=./protobuf-2.4.1/lib/ ./protobuf-2.4.1/bin/protoc -I=. --cpp_out=. $^

6、创建一个执行脚本

#!/bin/bash

export LD_LIBRARY_PATH=protobuf-2.4.1/lib/
./write
./read                                      

综上,代码目录结构为:

protodata/
|-- makefile
|-- myfile.txt
|-- pay.proto
|-- protobuf-2.4.1
|   |-- bin
|   |-- include
|   `-- lib
|-- read.cpp
|-- test.sh
`-- write.cpp

记得要先创建文件myfile.txt

执行 

./test.sh 

结果:

10
jack

 

参考:

ProtoBuf安装和使用简介

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值