Проточные буферы - это нейтральный по отношению к нейтрали нейтральным по отношению к платформе способ кодирования структурированных данных в эффективном, но расширяемом формате. Google использует протокольные буферы практически для всех своих внутренних протоколов RPC и форматов файлов. Это также кодировка данных по умолчанию, используемая каркасом gRPC с открытым исходным кодом.

Буферы протокола - это гибкий, эффективный и автоматизированный механизм сериализации структурированных данных - думаю, XML, но меньше, быстрее и проще. Вы определяете, как вы хотите, чтобы ваши данные были структурированы один раз, затем вы можете использовать специальный сгенерированный исходный код, чтобы легко писать и читать ваши структурированные данные в различные потоки данных и из разных источников и из разных языков. Вы даже можете обновить свою структуру данных, не разбирая развернутые программы, которые скомпилированы против "старого" формата.

Компиляторы буфера протокола способны обрабатывать широкий диапазон синтаксиса языка, включая C, C++, Java, Objective C, Python и PHP. Это означает, что сообщения, определенные в прото файлах, могут быть преобразованы в эквивалентные свойства или переменные в исходные файлы, принадлежащие этим языкам, и многие другие.

Определение выборки:

message Person {
  string name = 1;
  int32 id = 2;
  string email = 3;

  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }

  message PhoneNumber {
    string number = 1;
    PhoneType type = 2 [default = HOME];
  }

  repeated PhoneNumber phone = 4;
}

Больше информации на официальном сайте protobuf. Последняя версия API - proto3, которая в значительной степени похожа на proto2, но имеет некоторые отличительные отличия.