flatBuffers協議在Java中教程

flatBuffers是goole在推出protobuf協議後的另外一種網絡協議,解析性能上比protobuf更好。以下是flatBuffers的教材;

第一步:下載flatc工具(下載:https://github.com/google/flatbuffers)


flatBuffers協議在Java中教程

找到自己需要版本:

flatBuffers協議在Java中教程

第二步:下載flatbuffers-java.jar(https://mvnrepository.com/artifact/com.google.flatbuffers/flatbuffers-java)


flatBuffers協議在Java中教程

注意flatc和jar的版本號一定要一致,防止出現特殊的bug。

第三步:生產協議代碼


flatBuffers協議在Java中教程

在test.fbs文件內容:


flatBuffers協議在Java中教程

命令:flatc.exe --java test.fbs生產Java文件。

第四步:實際案例

<code>public class testFlatBuffers {
public static void main(String[] args){
FlatBufferBuilder fbb =new FlatBufferBuilder();
int idIndex=fbb.createString("sss"); //放入一個字符串 並獲得緩存的偏移地址 int nameIndex=fbb.createString("李四");
//準備生成mm對象; int ai0=fbb.createString("php語言");

int ai1=fbb.createString("java語言");
int[] as=new int[2];
as[0]=msgClass.MM.createMM(fbb,ai0,34534);
as[1]=msgClass.MM.createMM(fbb,ai1,3);
int arrayIndex=msgClass.msg1_1.createArrayVector(fbb,as); //放入
//準備放入整型數組
int[] d={2,23};
int ss=msgClass.msg1_1.createDataIntVector(fbb,d);
int[] s=new int[2];
//準備放入字符串數組
s[0]=fbb.createString("232文字");
s[1]=fbb.createString("中國");
long phid=134534543534L;
int strIndex=msgClass.msg1_1.createDatStrVector(fbb,s);
//開始封裝協議 msgClass.msg1_1.startmsg1_1(fbb);
msgClass.msg1_1.addName(fbb,nameIndex);
msgClass.msg1_1.addAge(fbb,343);
msgClass.msg1_1.addPhid(fbb,phid);
msgClass.msg1_1.addAdress(fbb,idIndex);
msgClass.msg1_1.addIsLogin(fbb,true);
msgClass.msg1_1.addArray(fbb,arrayIndex);
msgClass.msg1_1.addDataInt(fbb,ss);
msgClass.msg1_1.addDatStr(fbb,strIndex);
//封裝結束
int endmsg1=msgClass.msg1_1.endmsg1_1(fbb);
fbb.finish(endmsg1);
byte[] da2=fbb.sizedByteArray();
//等到最終數據
System.out.println("數據長度:"+da2.length);

//開始解析數據:
ByteBuffer m1=ByteBuffer.wrap(da2); //將byte[]轉換成bytebuffer
msgClass.msg1_1 m =msgClass.msg1_1.getRootAsmsg1_1(m1);
System.out.println("name==>"+m.name());
System.out.println("age==>"+m.adress());
System.out.println("phid==>"+m.phid());
System.out.println("isLogin===>"+m.isLogin());
System.out.println(m.arrayLength()+"===>"+m.array(1).nn());
System.out.println(m.dataIntLength()+"==>"+m.dataInt(1));
System.out.println(m.datStrLength()+"===>"+m.datStr(1));
}
}/<code>


分享到:


相關文章: