1)底層通信資料封裝與操作
BinaryInputArchive& BinaryOutputArchive底層通信資料封裝與操作
BinaryInputArchive是對于DataInput的封裝,用于處理基于zookeeper協定的底層資料,其實是從DataInputStream輸入中讀取資料。
BinaryOutputArchive是對于DataOutput的封裝,根據zookeeper協定将資料寫入到DataOutputStream中去。
1. 讀取int, boolean基本資料類型直接代理給DataInput執行
寫入int, boolean基本資料類型直接代理給DataOutput執行
2. 讀取String和Buffer是,BinaryInputArchive根據Zookeeper協定做了處理
1) 讀取四個位元組int值表示讀取資料内容的大小
2) 根據資料大小建構一個byte數組
3) 将DataInput的資料讀取到位元組數組中
寫入String和Buffer是,BinaryOutputArchive根據Zookeeper協定做了處理
1) 寫入四個位元組int值表示寫入資料内容的大小, 如果寫入資料為null,值為-1
2)将資料轉為位元組數組,寫入DataOutput中
3. 讀取複雜的資料對象,Zookeeper底層傳輸的對象都需要實作Record接口,readRecord方法,會代理給Record進行反序列化
寫入複雜的資料對象,Zookeeper底層傳輸的對象都需要實作Record接口writeRecord方法,會代理給Record進行序列化
4. 對于Record對象中持有集合對象(當然能夠序列化與反序列化,集合中的元素必須也實作Record):
BinaryInputArchive提供startVector
1) 讀取四個位元組的int數,表示集合的大小
2) 建構一個BinaryIndex對象傳回
BinaryOutputArchive提供startVector
向DataOutput資料流中寫入集合大小,如果為null值為-1
5. BinaryInputArchive對象的内部類BinaryIndex作用,主要是用來計數集合對象的反序列話的
Record是zookeepr底層通信資料序列化與反序列化統一接口,
2)Record接口
Record是zookeepr底層通信資料序列化與反序列化統一接口
1. 繼承結構
子類以Request結尾的是Client向Server發起請求
子類以Response結尾的是Server向Client發起響應
子類以Txn結尾是Server向Server發起事務請求的
子類以Packet結尾是…???
其他如Id, ACL往往被其他對象持有,不會單獨在網絡傳輸
2. 舉例
1)CreateRequest: 用于在用戶端建立一個節點時向伺服器端發送的請求
序列化CreateRequest,
archive對象是對DataOutput封裝,順序的将資料寫入到DataOutputStream輸出流中去
反序列化CreateRequest,
archive對象是對DataInput封裝,順序的從DataInputStream輸入流中中讀取資料
熬夜不易,點選請老王喝杯烈酒!!!!!!!