将额外的字节填充到要通过网络发送的 flatbuffer 的缓冲区指针

Padding extra bytes to flatbuffer's buffer pointer which is to be sent over the network

请查找此代码以了解上下文。

auto normalized_log = CreateNormalizedLog(builder, pairs);
builder.Finish(normalized_log);
auto buffPtr = builder.GetBufferPointer();
SendUdpPacket(&ipInfo, reinterpret_cast<SOCKET>(ipInfo.hdle), buffPtr, builder.GetSize());

我需要打包创建的buffPtr的大小(固定两个字节)。在不复制整个缓冲区的情况下,是否有 appending/offsetting 的首选方法?

我想我不能将大小添加到架构中,因为在接收后我应该知道大小而无需调用 getRootAsNormalizedLog。

有没有办法向生成的缓冲区添加额外的字节?

没有内置的工具来制作缓冲区长度前缀。您不需要:UDP 数据包(和大多数传输机制)知道其有效负载的大小,因此自己为其添加前缀只会是重复信息。

也就是说,如果你坚持不复制就这样做,你可以这样做:

auto size = static_cast<uint16_t>(builder.GetSize());
builder.PushElement(size);

这将为缓冲区添加 16 位大小的前缀。这种方法的问题是缓冲区已经针对它们的最大元素进行了对齐,因此缓冲区现在可能在目的地未对齐。因此,您最好使用 32 位(或 64 位)长度,具体取决于缓冲区中最大的标量。