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

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

本文关键字:网络 flatbuffer 缓冲区 指针 字节 填充      更新时间:2023-10-16

请查找此代码中的上下文。

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的大小(固定两个字节)。在不复制整个缓冲区的情况下,是否有附加/偏移的首选方法?

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

有没有办法将额外的字节添加到结果缓冲区中?

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

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

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

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