flatbuffers: сериализация / десериализация структуры с желаемым размером - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь сериализовать базовую c структуру с плоскими буферами на C ++, например:

struct Vec3 {
  x:float;
  y:float;
  z:float;
}

с кодом ниже:

Vec3 my_pos = {1.1, 1.2, 1.3};
auto myOtherItemn = myBuilder.CreateStruct<Vec3>(position);
myBuilder.Finish(myOtherItemn);

Теперь, когда я отображаю размер мой pos:

printf("size of Vec3           : %d\n", sizeof(MyGame::Sample::Vec3));

размер 12 , как и ожидалось. размер с плавающей запятой составляет 4 байта.

, но после сериализации размер сериализованного объекта:

printf("size of serialized data: %d\n", myBuilder.GetSize());

равен 16

, когда я проверяю, есть 4 байта в начале сериализованных данных. Я не доволен этими дополнительными 4 байтами. Я хочу избавиться от этого.

Так есть ли способ получить сериализованный вывод того же размера, что и исходный размер структуры (а именно 12 для этого случая)?

1 Ответ

0 голосов
/ 21 февраля 2020

Во-первых, вы не можете иметь struct в качестве root буфера, это должно быть table. CreateStruct - это особая функция для использования с объединениями, пожалуйста, следуйте инструкциям по сериализации структур.

Кроме того, FlatBuffers - это формат, который имеет дополнительные данные управления помимо фактических данных, которые вы храните. Вы не можете уменьшить размер только до байтов фактических данных. Если это то, что вам нужно, вам нужно жестко закодировать свой собственный формат и просто записать структуры на диск напрямую.

...