使用FlatBuffer不会减少序列化数据的大小

我写了以下fbs文件

命名空间测试;

table polygon {
    x : double;
    y  : double;

}

table layer {
    layer_name : string;
    polygons : [polygon];
}

root_type layer;

我的计划是序列化大约500万个坐标并将其转储到一个文件中。问题是我看到的是与我期望的相比增加了字节数。我期望它应该是arounf(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();
    }

请让我知道我在这里做错了什么

elsawin2012 回答:使用FlatBuffer不会减少序列化数据的大小

table polygon更改为struct polygontable是可扩展的,每个元素具有一些固定的开销,并且向量在偏移量上也被引用。 struct是不可扩展的(对于xy对来说似乎不错),必须进行内联序列化(请参阅本教程中的示例),并且将为您提供所需的大小。

本文链接:https://www.f2er.com/2692074.html

大家都在问