分散データの一貫性(シリアライゼーションおよびプロトコル)の飼育係内部実装(IV)

飼育係のクライアントとサーバは、データ伝送、通信のためのネットワークのためのネットワーク通信のシリーズを通過し、我々は最初に解決しなければならないデータのシリアライズとデシリアライズです。

  ZKコンポーネントのジュートシリアライズとデシリアライズデータのこのシーケンスを使用します。

 コードを見て:ジュートは、使用して直列化:

1つの インポートorg.apache.jute.Record。
2  
3  パブリック クラス MockReqHeaderが実装レコード{
 4      プライベート 長いセッションIDと、
5      プライベート文字列型。
6      パブリックMockReqHeader(){}
 7      公共 MockReqHeader(長いセッションID、文字列型){
 8           .sessionId = セッションID。
9          この .TYPEは= タイプ。
10      }
 11      公衆 ロングGETSESSIONID(){
 12          リターンセッションID;
13      }
 14      公共 ボイド setSessionId(長いセッションID){
 15          この .sessionId = セッションID。
16      }
 17      パブリック文字列のgetType(){
 18          リターンタイプ、
19      }
 20      公共 ボイドはsetType(文字列M_){
 21          種類= M_。
22      }
 23      公共 ボイドシリアライズ(OutputArchive、文字列タグ)がスローにjava.io.IOException {
 24          a.startRecordを(この、タグ)。
25          a.writeLong(セッションID、 "セッションID" )。
26          a.writeString(タイプ「タイプ」)。
27          a.endRecord(このタグ)。
28      }
 29      公共 ボイドデシリアライズ(InputArchive bの、文字列タグ)がスローにjava.io.IOException {
 30          b.startRecord(タグ)。
31          セッションID = b.readLong( "セッションID" )。
32          種類= b.readString( "タイプ" )。
33          b.endRecord(タグ)。
34      }
 35  }
 36 
37  / * 注シリアル化メソッドをデシリアライズ/ *

  シリアライズとデシリアライズのMockReqHeaderエンティティクラス。

1  インポートorg.apache.jute.BinaryInputArchive;
 2  インポートorg.apache.jute.BinaryOutputArchive;
 3  
。4  パブリック クラスJuteSample {
 5      パブリック 静的 ボイドメイン(文字列[]引数)がスロー{例外
 6。         // シリアライゼーションおよび構造を始めますシリアライザBinaryOutputArchive 
7。          ByteArrayOutputStream BAOS = 新しい新しいByteArrayOutputStream();
 8          BinaryOutputArchiveボア= BinaryOutputArchive.getArchive(BAOS);
 9          // 行くオブジェクトヘッダをシリアライズ;     
10          新しい新MockReqHeader( "ピングの" 0x34221eccb92a34el).serialize(BoAの"ヘッダ" );
 11          // ここで、典型的にはTCPネットワーク伝送対象
12である          のByteBuffer BB = ByteBuffer.wrap(baos.toByteArray());
 13は 
14          // 反応シーケンスを開始します
15          ByteBufferInputStream Bbis = 新しい新; ByteBufferInputStream(BB)
 16          BinaryInputArchive BBIA = BinaryInputArchive.getArchive(Bbis)
 。17          MockReqHeaderヘッダ2 = 新しい新しいMockReqHeader();
 18である                 // ヘッダをデシリアライズ; 
19          header2.deserialize(BBIA、「ヘッダ" );
 20          bbis.close()。
21          baos.close()。
22      }
 23 }        

 

上記の例として、我々は理解することが、今ジュート及びジュートの両方のコンフィギュレーションファイルから、レコードのシリアル・インターフェース・シリアライザBinaryOutOoutArchiveを述べました。

  1.録音インタフェース

    インタフェースは、二つの方法があります;公共ボイドデシリアライズ(InputArchive A_、文字列タグ)公共ボイドシリアライズ(OutputArchive A_、文字列タグ)。

    、メソッドレコードインターフェース実装されたすべてのこれらのエンティティクラスは、それらがアーカイブされてシリアル化であり、直列化および非直列化する方法を決定し、デシリアライズは、シリアライゼーションおよびデシリアライゼーションを同定するためのタグであります;

  2。OutputArchive和InputArchive

    両方のインターフェイスは、ジュートシリアライザおよびデシリアライザの根底にしています。

    ジュートの最新バージョン:BinaryOutputArchive / BinaryInputArchive; CSV *;のXml *; 3基;

    BinaryOutputArchiveデータオブジェクトシリアライゼーションおよびデシリアライゼーションは、主にネットワークの伝送と伝送ローカルディスクに使用される、ZKは、基礎となる主シリアライゼーションです。

  3.ジュートプロフィール

    srcディレクトリZzookeeperでは、のzookeeper.juteと呼ばれるファイルがあります。 

// 飼育係定义
モジュールorg.apache.zookeeper.data {
      クラスイド{
         スキームをUStringで。
         UStringのID;
    } 
    クラスACL {
         int型prems。
        やった;
   } 
   ......
}

    例えば上記の、およびIdはACL二つのクラスを定義します。この文書では、我々はすべての関連するエンティティクラスのパッケージ名、クラス名、およびクラス変数とその型のすべてのメンバを定義します。

    これは、ジュートは、発電機はクラスはこれらのクラス定義の実際のプログラミング言語をファイル生成異なるコードを使用して、ソースファイルのコンパイル・フェーズで定義されています。

おすすめ

転載: www.cnblogs.com/startelk/p/11764044.html