serialization - 使用 flatbuffer 不会减少序列化数据的大小
问题描述
我写了以下fbs文件
命名空间测试;
table polygon {
x : double;
y : double;
}
table layer {
layer_name : string;
polygons : [polygon];
}
root_type layer;
我的计划是序列化大约 500 万个坐标并将其转储到一个文件中。问题是我看到的字节数与我预期的相比有所增加。我期望它应该是 arouf (5M* 16) 字节。但我得到的大小是 140000032 字节
这是我用于将序列化数据转储到文件中的 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();
}
如果我在这里做错了什么,请告诉我
解决方案
变成. table polygon
_ 是可扩展的,并且每个元素有一些固定的开销,并且还被偏移量上的向量引用。A不可扩展(这对于 xy 对来说似乎很好),并且必须内联序列化(参见教程中的示例),并且会给你你期望的大小。struct polygon
table
struct
推荐阅读
- swift - Filling animation + permanent mask in swift?
- java - OpenSAML 3.0+ 中的全局安全配置
- android - Reloading view objects when I replace fragments in Android Kotlin
- ruby-on-rails - Rails Api 测试 UrlGenerationError
- python - 机器人框架库动态导入不保持全局
- python - How to pass weights and mask to weighted_masked_objective in keras?
- javascript - 如何确定函数的内存和时间复杂度?
- javascript - 查找未知的活动事件侦听器 Javascript
- angular - 角 6 | AngularFireDatabase - 从对象返回键和值
- image - 在本机反应中找不到该模块