Рассмотрим сообщение protobuf:
message DataMessage {
int32 custId = 1;
string uuid = 2;
int32 version = 3;
string firmName = 4;
google.protobuf.Timestamp date = 5;
int32 accountNo = 6;
string firmName = 7;
bytes payload = 8;
}
Я заполняю это и маршалю его в байтовый массив и публикую это как сообщение Кафки.Все это прекрасно работает.
Теперь к вопросу: обработчик Kafka получает байтовый массив.Я хотел бы изменить поля 2 и 3 ONLY без необходимости демонтажа массива байтов обратно в DataMessage, изменить поля 2 и 3, а затем перенаправить его обратно в другой массив байтов, чтобы он мог быть Кафкойопубликовано до следующего прыжка.Поле 3 является строкой, но это GUID в формате ISO.Модификация здесь не будет увеличивать или уменьшать длину поля.
protob.Buffer
, кажется, не облегчает это.Кажется, он позволяет кодировать / декодировать по одному полю за раз.
Полезная нагрузка (поле 8) имеет размер 99% и не будет изменяться.Я хотел бы пропустить все временные копии и маршал / демаршал, чтобы изменить 1%.
Возможно?Я думаю, если бы я знал смещения в байтовом массиве для полей 2 и 3, я мог бы использовать модификацию байтов на месте ... однако это до некоторой степени подрывает целостность маршалированных байтов.Это можно упростить, используя fixed32 вместо int32 ... так что смещения в байтовом массиве согласованы.