public static Offset <FlatE> CreateFlatE(FlatBufferBuilder builder, bool a = false, int b = 0, float c = 0, StringOffset d = default(StringOffset)) { builder.StartObject(4); FlatE.AddD(builder, d); FlatE.AddC(builder, c); FlatE.AddB(builder, b); FlatE.AddA(builder, a); return(FlatE.EndFlatE(builder)); }
public FlatE GetE(FlatE obj, int j) { int o = __offset(12); return(o != 0 ? obj.__init(__indirect(__vector(o) + j * 4), bb) : null); }
public static FlatE GetRootAsFlatE(ByteBuffer _bb, FlatE 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)); }