資料序列化 protobuff3 初涉

2021-10-07 18:37:50 字數 1597 閱讀 1461

三種都與語言無關,平台無關

protobuf是二進位制格式比xml,json等字串協議更高效,也比xml更小(3~10倍),效率更快(20 ~ 100倍)。

擴充套件性,相容性好;可以更新資料結構,而不影響和破壞原有的舊程式。

protobuf操作更為簡單,因為不僅僅有通用的介面,也能生成特例介面。

./configure --prefix=/home/***/pb  

make

make install

* /home/***/pb 是庫安裝路徑

bin  

bin/protoc //proto 檔案編譯工具

include //庫頭檔案目錄

lib //庫檔案目錄,包含3個庫檔案

lib/libprotobuf.*** //完整版,庫大小較大

lib/libprotobuf-lite.*** //精簡版,庫大小較小

lib/libprotoc.***

* 檔名example.proto

syntax = "proto3";

option optimize_for = lite_runtime;

message example

protoc -i=./ --cpp_out=./ example.proto

* -i : 說明example.proto的檔案路徑

* --cpp_out : 資料操作**生成路徑

* 成功後會生成檔案 example.pb.cc, example.pb.h

#include #include #include #include "example.pb.h" //引入前面生成的檔案

int main()

output.close();

example example2;

//將資料從檔案讀出

std::fstream input("configure", std::ios::in|std::ios::binary);

if(!example2.parsefromistream(&input))

std::cout << example2.id() << " " << example2.name() << " " << example2.age() << std::endl;

return 0;

}

g++ -std=c++11 -i . -i ../include example.pb.cc test.cpp -l ../lib -lprotobuf-lite -lpthread -o test 

* 不加 -lpthread,編譯正常,但是執行時會崩潰報錯

* protobuff3需要指定c++11,v2版本不需要

protocol buffer定義了三種優化級別speed/code_size/lite_runtime,預設情況下是speed;通過proto檔案中的option optimize_for 選擇。

序列化(序列化)

原書上翻譯為序列化,msdn翻譯為序列化 作用 當需要儲存,或者網路傳輸 remoting時,資料 物件或值 需要序列化 類似於打包傳輸檔案。system.serializableattribute 序列化是指儲存和獲取磁碟檔案 記憶體或其他地方中的物件。在序列化時,所有的例項資料都儲存到儲存介質上...

資料序列化和反序列化

序列化 encoding 把python物件編碼轉換成json字串。反序列化 decoding 把json格式字串解碼為python物件。python中序列化通常有兩種方式 pickle模組和json模組 pickle模組的使用 對於大多數應用程式來講,dump 和load 函式的使用就是你使用pi...

序列化(模型序列化 序列化巢狀)

from rest framework import serializers from meituan.models import merchant,class merchantserializer serializers.modelserializer class meta model merch...