Есть ли способ получить размер закодированного сообщения Avro без фактического его кодирования?
Я использую Avro 1.8.1 для C ++.
Я привык к буферам протокола Google, где вы можете позвонить ByteSize()
на protobuf, чтобы получить закодированный размер, так что это что-то похожее, что я ищу.
Поскольку сообщение по сути является необработанной структурой, я понимаю, что размер не может быть получен из самого сообщения, но, возможно, существует вспомогательный метод, о котором я не знаю?
К сожалению, нет пути …
Вот пример, показывающий, как можно рассчитать размер путем кодирования объекта:
MyAvroStruct obj;
avro::EncoderPtr encoder = avro::binaryEncoder();
std::auto_ptr<avro::OutputStream> out = avro::memoryOutputStream(1);
encoder->init(*out);
avro::encode(*encoder, obj);
out->flush();
uint32_t bufferSize = out->byteCount();
Других решений пока нет …