Serialization 未使用flatbuffer减小序列化数据的大小
我写了以下fbs文件 名称空间测试Serialization 未使用flatbuffer减小序列化数据的大小,serialization,flatbuffers,Serialization,Flatbuffers,我写了以下fbs文件 名称空间测试 table polygon { x : double; y : double; } table layer { layer_name : string; polygons : [polygon]; } root_type layer; 我的计划是序列化大约500万个坐标并将其转储到一个文件中。问题是我看到的是,与我预期的相比,字节数增加了。我希望它应该是大约500万(5米*16)字节。但我得到的大小是14000032字
table polygon {
x : double;
y : double;
}
table layer {
layer_name : string;
polygons : [polygon];
}
root_type layer;
我的计划是序列化大约500万个坐标并将其转储到一个文件中。问题是我看到的是,与我预期的相比,字节数增加了。我希望它应该是大约500万(5米*16)字节。但我得到的大小是14000032字节
下面是我用来将序列化数据转储到文件中的java代码
FlatBufferBuilder fbb = new FlatBufferBuilder(0);
String s = "Product1";
int str = fbb.createString("layer1");
int size = 1 * 5 * 1000000;
int[] offset = new int[size];
int cur = 0;
for (double i = 0; i < size; i++) {
fbb.startTable(2);
polygon.addX(fbb, i);
polygon.addY(fbb, i);
offset[cur++] = polygon.endpolygon(fbb);
}
int arrayoffset = layer.createPolygonsVector(fbb, offset);
layer.startlayer(fbb);
layer.addLayerName(fbb, str);
layer.addPolygons(fbb, arrayoffset);
int bla = layer.endlayer(fbb);
fbb.finish(bla);
ByteBuffer bf = fbb.dataBuffer().duplicate();
File myfile = new File("/tmp/test.dat");
try {
FileChannel channel = new FileOutputStream(myfile).getChannel();
channel.write(bf);
channel.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
FlatBufferBuilder fbb=新的FlatBufferBuilder(0);
字符串s=“Product1”;
int str=fbb.createString(“layer1”);
整数大小=1*5*1000000;
int[]偏移量=新的int[大小];
int cur=0;
用于(双i=0;i
如果我在这里做错了什么,请告诉我将
表格多边形
更改为结构多边形
<代码>表是可扩展的,每个元素都有一些固定的开销,并且也由偏移量上的向量引用。struct
是不可扩展的(对于xy对来说这似乎很好),必须内联序列化(请参见教程中的示例),并将提供您期望的大小