Как определить файл *.proto с переменной длиной полезной нагрузки?

Я пытаюсь написать свой первый файл *.proto. Это моя попытка:

syntax = "proto3";
package Message;

message Message {
    string name = 1;
    string serial = 2;
    int32 command = 3;

    enum Status {
        GOOD = 0;
        BAD = 1;
    }

    Status status = 4;
    int32 length = 5;

    // end of header
    // start of payload

    int32 data = 6;

    string address = 7;
}

Заголовок имеет длину поля. Это значение определяет длину поля данных в полезной нагрузке. И это моя проблема: поле данных является динамическим, я не могу знать размер прямо сейчас. Я мог бы разделить заголовок и полезную нагрузку на 2 отдельных файла *.proto. Но тогда еще я не знаю, как динамически установить длину одного из полей.

Заранее спасибо за помощь!


person selmaohneh    schedule 09.07.2018    source источник
comment
Protobuf уже имеет дело с такими деталями, как длина полезной нагрузки — вам это не нужно. Ваша полезная нагрузка может быть строкой, структурированными вложенными сообщениями или просто bytes: protobuf обрабатывает детали. Я неправильно понимаю вопрос?   -  person Marc Gravell    schedule 09.07.2018
comment
Если бы я сам разрабатывал протокол, я бы не использовал поле длины, правильно. Но я пытаюсь реализовать существующий протокол с этим полем длины. Так может ли Protobuffer знать размер данных без использования поля длины?   -  person selmaohneh    schedule 09.07.2018
comment
Protobuf не предназначен для сопоставления с существующими протоколами. Это означает, что у него есть собственный протокол, и это все, что он делает. Если вы ожидаете установить protobuf на что-то другое: вы можете быть разочарованы   -  person Marc Gravell    schedule 09.07.2018
comment
Не то, что я хотел услышать. ???? Это значит, что я должен сам написать парсинг. Это такая обычная задача... Не могу поверить, что нет библиотек/фреймворков, облегчающих жизнь. Буфер протокола был моей надеждой. Спасибо за информацию!   -  person selmaohneh    schedule 10.07.2018


Ответы (1)


Буфер протокола не позволяет проверять зависимости между полями. Вы должны сами проверить, соответствует ли length длине data.

person Martin Thoma    schedule 11.12.2018