2016-03-29 14 views
0

Bitte lesen Sie diesen Code für den Kontext nach.Zusätzliche Bytes in den Pufferpuffer von flatbuffer, der über das Netzwerk gesendet werden soll.

Ich muss die Größe der erstellten BuffPtr (mit festen zwei Bytes) packen. Gibt es eine bevorzugte Möglichkeit zum Anhängen/Verrechnen, ohne den gesamten Puffer zu kopieren?

Ich glaube, ich kann dem Schema keine Größe hinzufügen, weil ich nach dem Empfang die Größe kennen sollte, ohne getRootAsNormalizedLog aufzurufen.

Gibt es eine Möglichkeit, zusätzliche Bytes zum resultierenden Puffer hinzuzufügen?

Antwort

1

Es gibt keine integrierte Möglichkeit, eine Pufferlänge voranzustellen. Sie sollten es auch nicht nötig haben: UDP-Pakete (und die meisten Übertragungsmechanismen) kennen die Größe ihrer Nutzlast, also würde das Voranstellen selbst eine doppelte Information sein.

Das heißt, wenn Sie darauf bestehen, dies ohne den Kopiervorgang zu tun, können Sie etwas tun könnte:

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

Dadurch wird der Puffer mit einem 16-Bit-Größe Präfix. Das Problem bei diesem Ansatz besteht darin, dass der Puffer bereits auf seine größten Elemente ausgerichtet wurde, sodass der Puffer jetzt möglicherweise am Ziel nicht ausgerichtet ist. Daher ist es besser, eine 32-Bit- (oder 64-Bit-) Länge zu verwenden, abhängig davon, was die größten Skalare in Ihrem Puffer sind.

+0

Das funktioniert! Vielen Dank. –

+1

BTW, hinzugefügt einige Funktionen, um Größe vorfixieren Teil von FlatBuffers: https://github.com/google/flatbuffers/commit/486c048a0d5963f83f3a0d6957e4dde41602e2e7 – Aardappel