快速Python序列化到Flatbuffer?

快速Python序列化到Flatbuffer?,python,flatbuffers,Python,Flatbuffers,在探索flatbuffer库进行快速序列化时,我注意到该库使用“Variable”AsNumpy()命令将flatbuffer向量读入numpy数组的速度非常快,但我一直无法找到(在源代码中)将numpy序列化到flatbuffer的对应编码方法 到目前为止,我似乎仍坚持他们的榜样: for i in reversed(range(0, 10)): builder.PrependByte(i) 这显然不理想。反过来,可以简单地对大多数数据向量调用toNumpy(),效果非常好 是否缺少一些

在探索flatbuffer库进行快速序列化时,我注意到该库使用“Variable”AsNumpy()命令将flatbuffer向量读入numpy数组的速度非常快,但我一直无法找到(在源代码中)将numpy序列化到flatbuffer的对应编码方法

到目前为止,我似乎仍坚持他们的榜样:

for i in reversed(range(0, 10)):
  builder.PrependByte(i)
这显然不理想。反过来,可以简单地对大多数数据向量调用toNumpy(),效果非常好


是否缺少一些简单的功能或此功能不可用?

请参阅此stackoverflow链接以了解解决方法,并监控功能是否已更新:


我们可以这样做。考虑我们想编写<代码> ByTeSfMeime= Currase.ToByTeSe()/<代码>而不使用<代码>预编码()/<代码> < /P> 我们可以遵循以下步骤:

  • 确保已使用
    StartVector
    正确初始化生成器

    Image.ImageStartDataVector(builder, len(bytesOfImage))
    
    这将通过
    len(bytesOfImage)
    移动
    head
    ,字节数或更多取决于对齐操作等。但我们不需要担心这一点,因为StartVector API将处理这些事情。我们只需要知道
    StartVector()调用后的最新头部

  • 在写入字节数组之前,先查找标头以更正位置

    builder.head = builder.head - len(bytesOfImage)
    
    StartVector将
    头移动到新位置,正如我们所知,flatbuffers以小尾端顺序写入数据,即[N,N-1,N-2,…0]方式。因此,在写入之前,我们需要从当前更新的磁头返回位置
    len(bytesOfImage)

  • 将数据复制到字节数组中

    builder.Bytes[builder.head : (builder.head + len(bytesOfImage))] = bytesOfImage
    
  • 调用
    EndVector()

    data = builder.EndVector(len(bytesOfImage))
    

  • 它很可能不可用。我建议点击@kbrose在这里或在新的问题,看看是否有人想添加它。公平。我目前希望探索builder类的“internal”CreateByteVector()函数的用法,以便构建一个接受numpy.ndarray.tobytes()快速序列化的函数,并以这种方式实现。但是,嵌套断言语句有问题。我确实计划请求该功能,但在此期间需要立即对其进行破解。嗨,你让它工作了吗?我也在寻找在准备大BLOB时高效的写操作。。但这对我不起作用(你能和我分享你的发现吗?@AmitSharma作为链接,github提到直接访问字节。是的,它是“黑客式的”,但这是我们在1.5个月内使用的,没有任何问题。尽管我们最近因为无关的性能原因而切换到protobuffers。谢谢你的回答。我尝试了同样的方法,但这并不直接,也不适用于我;可能是因为我有复杂的模式。很高兴你能做到这一点。我将接受你的答案为了未来,但人们也应该意识到github的问题。