營銷型網(wǎng)站建設(shè)實(shí)戰(zhàn)》杭州優(yōu)化公司哪家好
初始ProtoBuf
序列化和反序列化的概念
什么情況下需要序列化和反序列化?
我們之前在學(xué)習(xí)HTTP階段簡單使用過json來進(jìn)行序列化和反序列化操作,除了json還有XML和這里要介紹的ProtoBuf。
ProtoBuf的優(yōu)點(diǎn):
1.語言無關(guān)性,跨平臺 :即支持多種語言和平臺
2.高效性。比XML更小,更快,更為簡單。
3.擴(kuò)展性,兼容性好。你可以更新數(shù)據(jù)結(jié)構(gòu),?不影響和破壞原有的舊程序。
ProtoBuf支持的語言:
ProtoBuf使用特點(diǎn)
如果我們使用的是C++,那么就會生成.h和.cc文件?
?總的來說:ProtoBuf 是需要依賴通過編譯?成的頭?件和源?件來使?的。
?這里舉一個例子:
假設(shè)我們要設(shè)計(jì)一個類,可以把它看作三個部分
分別是:
定義一系列屬性字段。這個是很容易的,比如int XXX;之類的
處理字段的方法:get set,這些實(shí)現(xiàn)起來不難,但是比較耗時。
處理類的方法 :序列化 反序列化。這個就更耗時了,還有一定的難度。
因此,為了解決第二個和第三個問題,在適用了ProtoBuf后,我們在.proto文件中只需要定義對應(yīng)的結(jié)構(gòu)體對象,以及它的屬性內(nèi)容。
接著通過protoc編譯器來自動的幫我們生成處理字段的方法,以及該類的序列化和反序列化。
也就是會幫我們生成一個.h和一個.cc文件,我們只需要包含它們就可以了。?
安裝ProtoBuf?
這里的演示以v21.11版本為例
Windows下安裝?
?先進(jìn)入ProtoBuf的GitHub首頁
找到 21.11
這里我們選擇 win64
下載好并解壓好后,打開
在bin目錄里?
這個其實(shí)就是ProtoBuf的 編譯器。接著我們把這個目錄配置到系統(tǒng)環(huán)境變量中
最后,檢查配置是否成功
打開cmd,輸入 protoc --version
能夠正確顯示版本,說明配置成功了。
Ubuntu下安裝?
下載 ProtoBuf 前?定要安裝依賴庫:autoconf automake libtool curl make g++ unzip?
?安裝依賴庫命令如下:
sudo apt-get install autoconf automake libtool curl make g++ unzip -y
?安裝好后,再回到gitHub那里
在這?我們希望?持全部語?,所以選擇 protobuf-all-21.11.zip,右鍵將下載鏈接復(fù)制出來。?
然后在我們的Ubuntu云服務(wù)下直接輸入
wget https://github.com/protocolbuffers/protobuf/releases/download/v21.11/protobuf-all-21.11.zip
?下載完后,解壓zip包
unzip protobuf-all-21.11.zip
解壓好后,進(jìn)入生成的文件中
接下來才是真正安裝ProtoBuf
進(jìn)入解壓好的文件后,執(zhí)行以下指令:
?
# 第?步執(zhí)?autogen.sh,但如果下載的是具體的某??語?,不需要執(zhí)?這?步。
./autogen.sh # 第?步執(zhí)?configure,有兩種執(zhí)??式,任選其?即可,如下:
# 1、protobuf默認(rèn)安裝在 /usr/local ?錄,lib、bin都是分散的
./configure
# 2、修改安裝?錄,統(tǒng)?安裝在/usr/local/protobuf下
./configure --prefix=/usr/local/protobuf
完事后會多一個Makefile文件
完成后再次執(zhí)行
make // 執(zhí)?15分鐘左右
make check // 執(zhí)?15分鐘左右
sudo make install
make check主要是確認(rèn)之前的步驟是否正確。
另外,在make check的時候,可能會出現(xiàn)以下錯誤
以下是步驟:
1.創(chuàng)建?swap 的文件(分配 3G 的swap分區(qū)大小)?
sudo fallocate -l 3G /swapfile
?2.然后執(zhí)行:
swapoff -a
3.再執(zhí)行
sudo fallocate -l 3G /swapfile
4.執(zhí)行以下命令為 swapfile 文件設(shè)置正確的權(quán)限
sudo chmod 600 /swapfile
5.使用?mkswap?實(shí)用程序在文件上設(shè)置?Linux?SWAP 區(qū)域:
sudo mkswap /swapfile
6.使用以下命令激活 swap 文件:
sudo swapon /swapfile
用以下命令驗(yàn)證:
sudo swapon --show
?7.要讓創(chuàng)建好的 swap 分區(qū)永久生效,可以將 swapfile 路徑內(nèi)容寫入到?/etc/fstab?文件當(dāng)中?:
sudo cp /etc/fstab /etc/fstab.bak
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
如果還是不行的話,可以考慮源碼的方式安裝。
安裝后驗(yàn)證
以上就說明安裝成功了。
?
關(guān)于一些問題?
用g++編譯代碼時會報(bào)錯:
?這個問題大致是沒有找到對應(yīng)的庫,我們可以確定我們的庫文件放在哪里:
我這里的庫文件是在
ll /usr/local/lib這個路徑下的:
接著我們再執(zhí)行:
echo $LIBRARY_PATH
?來查看當(dāng)前搜索庫的路徑:
如果發(fā)現(xiàn)跟剛剛的目錄不相符,比如:
那么就會出現(xiàn)剛剛上述的問題。
我們可以修改當(dāng)前用戶的~/.bashrc文件,在文件的末尾添加上:
export LIBRARY_PATH=/usr/local/lib:
?然后保存退出后,再執(zhí)行:
?
source ~/.bashrc
此時再查看我們的庫搜索路徑
就發(fā)現(xiàn)已經(jīng)修改了,然后再用g++編譯就不會報(bào)錯了
?