——————————— ダンスのない毎日は人生にとって失望です。
ProtoBuf について知る
1. シリアル化の概念
日常生活では、携帯電話で受信した音声メッセージをそのままネットワークに送信することはできませんが、ネットワーク内でのバイナリシーケンスの変換などの一連の信号を介して、音声メッセージはネットワーク送信用のバイナリシーケンスに変換されます。メッセージが受信されると、バイナリ シーケンスが音声メッセージに変換されます。このプロセスは実際にはシリアル化されます。
これは私たちが記述するコードにも当てはまり、ネットワーク上で送信されるオブジェクトは、直接作成されたオブジェクトではなく、オブジェクト変換のバイナリシーケンスを介して送信される必要があります。オブジェクトをバイナリ シーケンスに変換するプロセスはシリアル化プロセスと呼ばれ、バイナリ シーケンスをオブジェクトに復元するプロセスはデシリアライズ プロセスと呼ばれます。
上記のすべてがネットワーク送信に使用されていることがわかります。ローカル側では、メモリ内の構造化データ、つまりオブジェクトはシリアル化後にのみファイルに入れることができ、このプロセスにもシリアル化が必要です。さらに、受信および送信するデータベース、キャッシュなどにもシリアル化が含まれます。
- では、シリアル化と逆シリアル化とは何でしょうか?
シリアル化:オブジェクトをバイトのシーケンスに変換するプロセスは、オブジェクトのシリアル化と呼ばれます。
逆シリアル化:一連のバイトをオブジェクトに復元するプロセス? これは、オブジェクトの逆シリアル化と呼ばれます。
- シリアル化を実現するにはどうすればよいですか?
シリアル化は、Json、XML、および ProtoBuf を通じて実現できます。(この記事は ProtoBuf についての記事です)
二.プロトバッファ
1. ProtoBufとは
ProtoBuf の概念: 構造化データをシリアル化する方法。
2. ProtoBufの特徴
ProtoBuf (正式名は Protocol Buffer) は、簡単に言えば、構造化データをシリアル化するメソッドです。
1. 特徴:
- 言語非依存およびプラットフォーム非依存: つまり、ProtoBuf は Java、C++、Python などの複数の言語をサポートし、複数のプラットフォームをサポートします。
- 効率的: XML や Json よりも小さく、高速で、シンプルです。
- 優れたスケーラビリティと互換性: 元の古いプログラムに影響を与えたり破壊したりすることなく、データ構造を更新できます。
2. 使用の特徴: ProtoBuf に依存する必要があるコンパイルによって生成されたヘッダーおよびソース ファイル使用します。(C++の場合)
クラスを定義するときは、次の 3 つのことを行う必要があります。
- 一連の属性フィールドを定義します。
- フィールドを処理するメソッド: get、set など。
- クラスの処理メソッド: シリアル化と逆シリアル化 (1 つずつリストされていない他のメソッドもあります)
開発者にとって、属性フィールドの定義は比較的簡単ですが、他の 2 つのメソッドの作成は無駄で時間がかかります)
3. ProtoBuf のシリアル化と逆シリアル化のプロセス
ProtoBufではクラス(class)をメッセージ(message)と呼びます。
コンパイルによって生成されたヘッダー ファイルとソース ファイルに依存することは、実際にはメッセージ XXX を通じてクラス XXX を生成することであり、生成中にクラス XXX は分割されてソース ファイルとヘッダー ファイルが生成されます。
具体的なロジック:
- .proto ファイルを作成する目的は、構造オブジェクト (メッセージ) と属性コンテンツを定義することです。
- photoc コンパイラを使用して .proto ファイルをコンパイルし、新しく生成されたヘッダー ファイルやソース ファイルに配置できる一連のインターフェイス コードを生成します。
- 生成されたインターフェイスを利用し、コンパイルによって生成されたヘッダー ファイルをコードに組み込み、.proto ファイルで定義されたフィールドの設定と取得を実現し、メッセージ オブジェクトをシリアル化および逆シリアル化します。
一般に、ProtoBuf はコンパイルによって生成されたヘッダー ファイルとソース ファイルに依存する必要があります。このコード生成メカニズムを使用すると、開発者はプロトコル解析用のコードを作成する必要がなくなります (この種の作業は通常、報われません)。