flatBuffers是goole在推出protobuf協議後的另外一種網絡協議,解析性能上比protobuf更好。以下是flatBuffers的教材;
第一步:下載flatc工具(下載:https://github.com/google/flatbuffers)
找到自己需要版本:
第二步:下載flatbuffers-java.jar(https://mvnrepository.com/artifact/com.google.flatbuffers/flatbuffers-java)
注意flatc和jar的版本號一定要一致,防止出現特殊的bug。
第三步:生產協議代碼
在test.fbs文件內容:
命令: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>
閱讀更多 壞桃子 的文章