【问题标题】:Google flabtbuffer How to put array in struct in fbs fileGoogle flabtbuffer 如何将数组放入 fbs 文件中的结构中
【发布时间】:2020-02-13 17:38:15
【问题描述】:

这是对以下问题的扩展 Size of Serialized data is not reducing using flatbuffer

正如答案中提到的减少空间我们应该使用结构。但就我而言,我需要为 Polygon 定义一个 idl 文件

每个多边形将有五个或更多点,我将有另一个 DS 多边形数组 我已将我的 fbs 文件定义如下

namespace MyFlat;

struct Vertices {
    x : double;
    y  :double;

}
table Polygon  {

    polygons : [Vertices];
}

table Layer {

    polygons : [Polygon];
}


root_type Layer;

正如预期的那样,我的序列化数据大小变得非常大。有什么办法可以优化表中的填充以减小序列化缓冲区大小

【问题讨论】:

    标签: flatbuffers


    【解决方案1】:

    这里无需进一步优化数据结构,因为这些缓冲区的 >90% 大小通常会被 Vertices 占用。

    要考虑的一件事是将float 用于xy,因为您不太可能需要额外的分辨率。这几乎是缓冲区大小的一半。

    【讨论】:

      【解决方案2】:

      感谢您的回答。但是当我尝试打印具有顶点 5 的 100 个多边形的大小时,大小约为 10.24KB。理想大小应为 8000 字节(8 KB)左右

      b := flatbuffers.NewBuilder(0)
      var polyoffset []flatbuffers.UOffsetT
      size := 100
      
      StartedAtMarshal := time.Now()
      for k := 0; k < size; k++ {
          MyFlat.PolygonStartPolygonsVector(b, 5)
          for i := 0; i < 5; i++ {
              MyFlat.CreateVertices(b, 2.0, 2.4)
          }
      
          vec := b.EndVector(5)
          MyFlat.PolygonStart(b)
          MyFlat.PolygonAddPolygons(b, vec)
          polyoffset = append(polyoffset, MyFlat.PolygonEnd(b))
      }
      
      MyFlat.LayerStartPolygonsVector(b, size)
      for _, offset := range polyoffset {
          b.PrependUOffsetT(offset)
      }
      vec := b.EndVector(size)
      MyFlat.LayerStart(b)
      MyFlat.LayerAddPolygons(b, vec)
      finalOffset := MyFlat.LayerEnd(b)
      
      b.Finish(finalOffset)
      
      EndedAtMarshal := time.Now()
      fmt.Println("Elapes Time for Seri", EndedAtMarshal.Sub(StartedAtMarshal).String())
          mybyte := b.FinishedBytes()
          fmt.Println(len(mybyte))
      

      是预期大小还是我的实现有误

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-01
        • 2021-03-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多