Protobuf在各種環境中使用的總結

1.在 ubuntu 中 使用 proto-c 生成 .proto 對應

生成規則 protoc-c --c_out=./pb test.proto

--c_out 生成 C 語言的格式

./pb 輸出的路徑

test.proto 輸入的源文件 可以多個

在 makefile 中 增加 ./lib/libprotobuf-c.a 的鏈接庫

 

2.在c++中使用 protobuf

1.將 E:\share\protobuf\protobuf-2.6.1\vsprojects 項目生成的 libprotobuf.lib 拷貝到 運行項目的 lib文件夾中

2.protoc --cpp_out=../pb cardrv.proto

 

3.在nodejs中調用 protobuf

1.安裝 protobufjs

npm install protobufjs -g

2.在文件中 使用它

var protoBufJs=require("protobufjs");

var pbRoot = protoBufJs.loadSync(path.join(__dirname,"./pb/elabdata.proto"));

var eLabMessageType = pbRoot.lookupType("ELabMessage");

 

 

//加密:

var elabmsg=eLabMessageType.create();

....

var buf = eLabMessageType.encode(elabmsg).finish();

 

//解密:

var msg=eLabMessageType.decode(tmp);

 

 

4.在Unity中使用 protobuf

使用 protobuf-net

1.下載protobuf-net

2.生成cs代碼 protogen -i:U3d2Drv.proto -o:U3d2Drv.cs

3.將 protobuf-net.dll 拷貝到 u3d 項目裏面的 \Assets\Plugins

4.序列化 參考代碼

using (MemoryStream ms = new MemoryStream())

{

var a = new U3dDrvMsg();

a.cmd = U3dCmd.GameProcess;

a.gamestate = GameStateCmd.GameBegin;

ProtoBuf.Serializer.Serialize(ms, a);

byte[] result = new byte[ms.Length];

ms.Position = 0;

ms.Read(result, 0, result.Length);

}

5.反序列化參考代碼

T Deserialize<T>(byte[] b)

{

using (MemoryStream ms = new MemoryStream())

{

ms.Write(b, 0, b.Length);

ms.Position = 0;

return ProtoBuf.Serializer.Deserialize<T>(ms);

}

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章