Способ глубокого копирования объекта flatbuffer

Я представил свои данные с помощью flatbuffer. В настоящее время у меня возникла проблема, связанная с тем, что я делю большую коллекцию объектов в плоском буфере на несколько небольших частей.

Прямой способ — создать построитель плоского буфера для каждой части, а затем записать объект в этот построитель. Но когда объект немного сложный, копировать структуру данных за структурой довольно утомительно.

Поскольку плоский буфер хранит относительные смещения, теоретически я думаю, что можно просто скопировать байтовый буфер, чтобы скопировать объект в другой экземпляр плоского буфера. Есть ли уже что-то для глубокого копирования? Я сейчас использую java. Спасибо

Спасибо


person Vulcann    schedule 22.11.2017    source источник


Ответы (1)


Это сложнее, чем вы думаете, поскольку таблица и ее дочерние элементы не обязательно являются смежными в памяти и могут совместно использовать виртуальные таблицы с другими таблицами и т. д.

Самый простой способ - использовать вложенные FlatBuffers (вставить дочерний объект в байтовый вектор), поскольку затем его можно легко скопировать.

В C++ есть функция глубокого копирования с использованием отражения, но она медленная, требует двоичный файл схемы и еще не перенесена на Java. Новые таблицы «мини-рефлексии» подходят для глубокого копирования, но пока они доступны только на C++.

person Aardappel    schedule 22.11.2017