public static Offset <FlatA> CreateFlatA(FlatBufferBuilder builder, VectorOffset a = default(VectorOffset), VectorOffset b = default(VectorOffset), VectorOffset c = default(VectorOffset), VectorOffset d = default(VectorOffset), VectorOffset e = default(VectorOffset)) { builder.StartObject(5); FlatA.AddE(builder, e); FlatA.AddD(builder, d); FlatA.AddC(builder, c); FlatA.AddB(builder, b); FlatA.AddA(builder, a); return(FlatA.EndFlatA(builder)); }
public static FlatA GetRootAsFlatA(ByteBuffer _bb, FlatA obj) { return(obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
private static void test_flatbuf(A data) { // 序列化 Timer.beginTime(); var fbb = new FlatBufferBuilder(1); var offset_a = FlatA.CreateAVector(fbb, data.a); var offset_b = FlatA.CreateBVector(fbb, data.b); var offset_c = FlatA.CreateCVector(fbb, data.c); var offset_d_string = new StringOffset[data.d.Length]; for (int i = 0; i < data.d.Length; i++) { offset_d_string[i] = fbb.CreateString(data.d[i]); } var offset_d = FlatA.CreateDVector(fbb, offset_d_string); var offset_e_list = new Offset <FlatE> [data.e.Length]; for (int i = 0; i < data.e.Length; i++) { var item = data.e[i]; var offset_e_d = fbb.CreateString(item.d); offset_e_list[i] = FlatE.CreateFlatE(fbb, item.a, item.b, item.c, offset_e_d); } var offset_e = FlatA.CreateEVector(fbb, offset_e_list); var offset_flat_a = FlatA.CreateFlatA(fbb, offset_a, offset_b, offset_c, offset_d, offset_e); FlatA.FinishFlatABuffer(fbb, offset_flat_a); Timer.endTime("flatbuf 序列化"); // 反序列化 Timer.beginTime(); var buffer = fbb.DataBuffer; var flatA = FlatA.GetRootAsFlatA(buffer); Timer.endTime("flatbuf 反序列化"); var ret = new A(); ret.a = new bool[flatA.ALength]; for (int i = 0; i < flatA.ALength; i++) { ret.a[i] = flatA.GetA(i); } ret.b = new int[flatA.BLength]; for (int i = 0; i < flatA.BLength; i++) { ret.b[i] = flatA.GetB(i); } ret.c = new float[flatA.CLength]; for (int i = 0; i < flatA.CLength; i++) { ret.c[i] = flatA.GetC(i); } ret.d = new string[flatA.DLength]; for (int i = 0; i < flatA.DLength; i++) { ret.d[i] = flatA.GetD(i); } ret.e = new E[flatA.ELength]; for (int i = 0; i < flatA.ELength; i++) { var tmpE = flatA.GetE(i); ret.e[i] = new E() { a = tmpE.A, b = tmpE.B, c = tmpE.C, d = tmpE.D, }; } Timer.endTime("flatbuf 反序列化并且获取所有数据一次"); // 内存占用 Console.WriteLine(string.Format(" flatbuf 总占用内存 {0} byte.", buffer.Length)); }