У нас есть следующий сценарий:
- Мы создаем приложение flatbuffer в среде с допускается только статическое выделение памяти .
- Наши входящие плоские буферы содержат образы обновления программного обеспечения, которые больше, чем вся доступная оперативная память на процессоре.
- Требуется частично обработать входящий плоский буфер и передать изображения на другое устройство для хранения.
- Блок обработки не имеет постоянного хранилища, мы не можем сбросить большой плоский буфер и использовать
mmap()
.
- Мы хотим использовать класс
flatbuffers::Verifier
для проверки правильности полученного нами плоского буфера
Наш подход состоял в том, чтобы хранить метаинформацию об объектах в [ObjectInfo]
и двоично объединять все объекты изображения и помещать ее в вектор ubyte.
Но мы должны вручную отследить указатель на буфер и место, где мы находимся в векторе objects
. Мы не получаем прибыль от сгенерированного плоского буфера кода для доступа к objects
.
Пример схемы для задачи:
root_type Container;
table Container {
// Information about the big objects, has to fit into RAM,
metaInfo:[ObjectInfo]
// Does not fit into RAM, has to be streamed with arbitrary size buffer
bigObjects:[Objects];
}
table ObjectInfo {
type:int;
name:string;
offset:double; // Offset within Objects
length:double; // length of object
}
table Objects {
objects:[ubyte] // Contains the objects, contatinated
}
Нам нужно частично обработать плоские буферы.
Что мы можем сделать?