О протобуфе от Google - PullRequest
       10

О протобуфе от Google

2 голосов
/ 26 августа 2010

Я знаю, что это можно использовать для отправки / получения структурированного объекта из файла,

но можно ли его использовать для отправки / получения последовательностей структурированных объектов из сокета?

http://code.google.com/p/protobuf/

Ответы [ 3 ]

6 голосов
/ 26 августа 2010

Protocol Buffers - это структурированная структура сериализации данных (и десериализации).Он касается только кодирования выбора предварительно определенных типов данных в поток данных.Что вы делаете с этим потоком, зависит от вас.Чтобы процитировать вики:

Если вы хотите записать несколько сообщений в один файл или поток, вы должны следить за тем, где заканчивается одно сообщение и начинается другое.Формат протокола Protocol Buffer не является саморазграничением, поэтому синтаксические анализаторы буфера протокола не могут самостоятельно определить, где заканчивается сообщение.Самый простой способ решить эту проблему - записать размер каждого сообщения перед тем, как написать само сообщение.Когда вы читаете сообщения обратно, вы читаете размер, затем читаете байты в отдельный буфер, а затем анализируете этот буфер.

Так что да, вы можете использовать его для отправки / получения нескольких объектовчерез сокет, но вам нужно проделать дополнительную работу для дифференциации каждого потока объекта.

1 голос
/ 26 августа 2010

Я не знаком с protobuf, но документация говорит, что вы можете создать FileInputStream (который затем можно использовать для создания CodedInputStream), используя файловый дескриптор. Если вы работаете в системе, которая поддерживает сокеты BSD, вы, вероятно, должны иметь возможность дать ей дескриптор файла сокета, а не обычный.

0 голосов
/ 26 августа 2010

Protocol Buffers не обрабатывает какие-либо окружающие операции ввода-вывода сети / файла.Возможно, вы захотите использовать Thrift , который включает в себя библиотеки связи сокетов и серверные библиотеки с сериализацией / десериализацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...