1. 程式人生 > >GOOGLE PROTOBUF學習與使用心得

GOOGLE PROTOBUF學習與使用心得

先佔個坑,這兩天入門了protobuf,真心好用,想把學習的過程中記錄下來,供自己記錄與學習之用。

這邊文章包括了protobuf的64位編譯,使用方法以及測試。

今天有時間可以詳細說說protobuf了。

本來沒想到會用protobuf,記得一個專案中,涉及到網路通訊的專案,通訊模組的特性:在傳輸的過程中,先接收資料的長度,然後再接收資料,傳輸的是資料流,而在現實的過程中需要傳輸的資料可能很多樣,比如一個CLASS或者STRUCT,這些傳輸中需要對這些非char*、string或者bytes型別的資料進行轉換,這樣的轉換過程成為序列化,在接收時,需要對接收的資料轉換成原始的資料型別,這種轉換的過程稱為反序列化。

綜上:protobuf為我們傳輸資料提供了序列化與反序列的作用,聽說已經有比較多的方法,但是protobuf畢竟Google出品,這方面效能有保障,使用操作起來也足夠簡單。

來看看怎麼使用。

1、下載protobuf

隨便一個網址就能得到protobuf,我用的是protobuf windows版本的,下載好之後解壓

得到可執行檔案,這是protoc.exe可以直接執行,但是沒什麼用,沒有proto檔案

2、編譯64位protobuf。(可選)因為我的專案基本都是64位下進行的,要想使用64位的protobuf,需要重新配置檔案進行使用

下載protobuf原始碼,解壓後得到的檔案,用VS開啟檔案下vsprojects,開啟protobuf.sln,重新編譯protobuf,專案配置屬性裡設定成64位,重新生成lib和其他的檔案,

在編譯的過程中,會出現各種錯誤,比如我上篇博文說到的MAX和MIN的問題,


如上圖,分別編譯每一項,有人說libprotobuf-lite會出問題什麼的,我沒有遇到,每一項都是些小錯誤編譯成功。

分別把獲得的lib分64位和32位新建lib資料夾,如上圖,拷貝到這些資料夾中,

資料夾下的lib只需要libprotobuf.lib,libprotoc.lib,libprotobuf-lite.lib這三個

做到這一步,我們的準備工作基本完成了,下面用工程測試使用protobuf。

3、新建proto檔案:


如上圖,定義了一個結構體 Person,裡面包含NAME,ID,Email等自定義資訊,測試需要,不考慮太複雜的結構體,但是protobuf能使用的結構體遠比想象的強大。

在資料夾目錄下,輸入protoc lisa.proto --cpp_out=.

會在資料夾下生成lisa.pb.cc 和lisa.pb.h,這兩個檔案我們稍後就會用到

4、新建工程專案,這裡我直接使用一個通訊模組進行測試。

在檔案中新增現有項,把產生的cc和h檔案加入工程。

專案屬性設定如下圖


lilian::Person  person;
		person.set_id(0);
		person.set_name("lisarer");
		person.set_email("[email protected]");


		cout << "Before : ===============" << endl;
		cout << "ID:" << person.id() << endl;
		cout << "name:" << person.name() << endl;
		cout << "email:" << person.email() << endl;
		cout << endl;
		cout << endl;
		cout << endl;
		cout << endl;
		//char msg[];
		string str;
		person.SerializeToString(&str);
		char dst[2000];
		strcpy(dst, str.c_str());
		//std::stringstream ss;
		//ss << msg;
		//ss >> msg;


	//	printf_s("產生MSGGGGGGGGGGGGG=======%s\n", dst);


		Sleep(6000);
		comunMethod->SendMyMessage(dst, strlen(dst), "127.0.0.1", 5004);

在接收端同樣設定,也定義
lilian::Person anotherPer;
				//lilian::Person anotherPer;
				anotherPer.ParseFromString(mydata);
				cout << "After:============================" << endl;
				cout << "ID:" << anotherPer.id() << endl;
				cout << "Name:" << anotherPer.name() << endl;
				cout << "Email:" << anotherPer.email() << endl; }



成功的通過通訊模組進行了結構體傳輸測試

…………完

相關推薦

GOOGLE PROTOBUF學習使用心得

先佔個坑,這兩天入門了protobuf,真心好用,想把學習的過程中記錄下來,供自己記錄與學習之用。這邊文章包括了protobuf的64位編譯,使用方法以及測試。今天有時間可以詳細說說protobuf了。本來沒想到會用protobuf,記得一個專案中,涉及到網路通訊的專案,通訊

[轉]google protobuf安裝使用

google protobuf是一個靈活的、高效的用於序列化資料的協議。相比較XML和JSON格式,protobuf更小、更快、更便捷。google protobuf是跨語言的,並且自帶了一個編譯器(protoc),只需要用它進行編譯,可以編譯成Java、python、C++、C#、Go等程式碼,然

google protobuf學習筆記二:使用和原理

一.什麼是protobuf protobuf全稱Google Protocol Buffers,是google開發的的一套用於資料儲存,網路通訊時用於協議編解碼的工具庫。它和XML或者JSON差不多,也就是把某種資料結構的資訊,以某種格式(XML,JSON)儲存起來

google protobuf 傳送接收

1 void testSimpleMessage() 2 { 3 printf("==================This is simple message.================\n"); 4 //序列化LogonReqMessag

卷積神經網絡學習筆記心得(4)池化

設計者 位置 浪費 需要 三種 限制 右移 理論 alt 圖片經過卷積、激活後的結果一般帶有大量原圖信息。 上圖中卷積核提取的是豎直方向上的連續像素,但是,被增強的像素只占了結果的1/3,對於多層網絡,其余重要性較低的信息也被傳入了下一層網絡,造成了不必要的浪費,因此需要

機器學習實踐心得:數據平臺設計搭建US幸運飛艇平臺出租

git 要花 規範 支持 避免 取數據 用戶 硬件 app 機器學習作為近幾年的一項熱門技術US幸運飛艇平臺出租QQ2952777280【話仙源碼論壇】hxforum.com【木瓜源碼論壇】papayabbs.com,不僅憑借眾多“人工智能”產品而為人所熟知,更是從根本上增

TensorFlow筆記(7)-----實戰Google深度學習框架----隊列多線程

一起 width nbsp stop 之前 圖片 第一個 queue enqueue 一、創建一個隊列: FIFOQueue:先進先出 RandomShuffleQueue:會將隊列中的元素打亂,每次出列操作得到的是從當前隊列所有元素中隨機選擇的一個。 二、操作一個隊列的函

【實習日誌】TSN 網路學習實驗記錄/Constructor returned NULL && protobuf import error

  實驗目標:復現TSN網路結果 程式碼:https://github.com/yjxiong/temporal-segment-networks TSN介紹:https://zhuanlan.zhihu.com/p/32777430 到video-level testin

《TensorFlow:實戰Google深度學習框架》——6.2 卷積神經網路簡介(卷積神經網路的基本網路結構及其全連線神經網路的差異)

下圖為全連線神經網路與卷積神經網路的結構對比圖: 由上圖來分析兩者的差異:                  全連線神經網路與卷積網路相同點   &nb

Netty學習之路(八)-Google Protobuf編碼

Protobuf是一個靈活,高效,結構化的資料序列化框架,相比於XML等傳統的序列化工具,它更小,更快,更簡單。Protobuf支援資料結構化一次可以到處使用,甚至可以跨語言使用,通過程式碼生成工具可以自動生成不同語言版本的原始碼,甚至可以在使用不同版本的資料結構程序間進行資料傳遞,實現資料

【張文慧 廊坊師範學院資訊科技提高班十四期】VB學習_心得總結_VB資料庫

VB、資料庫 http://blog.csdn.net/mirabellezwh/article/details/73621794 http://blog.csdn.net/mirabellezwh/article/details/73621799 http://blo

深度學習框架Tensorflow學習應用(八 儲存和載入模型,使用Google的影象識別網路inception-v3進行影象識別)

一 模型的儲存 [email protected]:~/tensorflow$ cat 8-1saver_save.py # coding: utf-8 # In[1]: import tensorflow as tf from tensorflow.examples.tutorials

《TensorFlow 實戰Google深度學習框架》中MNIST數字識別問題程式的實現思考

書上的程式: import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data __author__: str = 'zhangkun' INPUT_NODE = 784

關於學習struts2的總結心得

在此處我將記錄一些我學習struts2時總結的要點,分章節與學習進度保持同步,與君共勉。 注:視訊學習資料來自北京尚學堂培訓公司-馬士兵所有。 開發環境:IDE為IDEA 2016.2.5,JDK1.8,struts版本為2.1.6,Tomcat為7.0.75 學習資料下載

Python學習方法記錄心得體會

我在學習Python爬蟲之前,只有一點點C++基礎。所謂“一點點”,指的是看過譚浩強的《C++程式設計》、磚頭一樣的《C++Primer》(當然,後者沒看完),有接觸實驗室的MFC大型專案經驗,但是對於資料結構、類、封裝等概念,理解得都不到位。 在這樣的基礎上

Google leveldb學習筆記一:基本架構安裝使用

簡介 LevelDB是一個Google編寫的快速鍵值儲存庫,它提供從字串鍵到字串值的有序對映。 基本架構 LSM樹儲存引擎 先說什麼是儲存引擎: 儲存引擎是儲存系統的發動機,直接決定了儲存系統能夠提供的效能和功能 儲存系統的基本功能包括:增刪讀改,讀取操作又

《機器學習》總結心得

目錄 6、應用 這段時間把《機器學習》看了一遍,總的來說,除了前兩章是基礎,其餘章節都是介紹模型方法,應用場景、理論推導、優化過程、演算法等,每章都可獨立閱讀而不受其他章節影響。 如果只是每一章都看完,頂多就是了解了一種方法,相互之間是割裂的

TensorFlow:實戰Google深度學習框架(五)影象識別卷積神經網路

第6章 影象識別與卷積神經網路 本章通過利用CNN實現影象識別的應用來說明如何使用TensorFlow實現卷積神經網路 6.1 影象識別問題簡介及經典資料集 1. Cifar Cifar-10:10種不同種類的60000張影象,畫素大小為3

Java資料通訊中使用Google Protobuf實現序列化反序列化

一、.什麼是protocol buffer        ProtocolBuffer是用於結構化資料序列化的靈活、高效、自動的方法,有如XML,不過它更小、更快、也更簡單。你可以定義自己的資料結構,然後使用程式碼生成器生成的程式碼來讀寫這個資料結構。你甚至可以在無需重新

學習筆記】Google JobScheduler Demo的學習運用

官方 DEMO 路徑如下 sdk\sources\android-22\com\android\demo\jobSchedulerApp\ Demo 需求 JobShedule的出發點是提供省電場景給使用者進行任務完成,目前主要場景如下 1.網路資