Я использую библиотеку google protobuf для записи сообщений в файл. Однако эти сообщения не выглядят для меня двоичными сообщениями. Прото, которое я использую, простое, имеет имя, адрес электронной почты и номер ячейки. Файл, который я получаю:

*
bilalÈÇbilal@gmail.com"
12345678

Если я читаю обратно, я могу прочитать, но это не выглядит двоичными данными, я хочу записать двоичный файл в файл, а затем проанализировать его во время чтения. Я прошел через API и обнаружил, что у нас есть несколько методов, доступных для parseFrom () , например:

1) parseFrom(InputStream)
2) parseFrom(CodedInputStream)
3) parseFrom(Byte[])

В учебных руководствах по google protobuf они используют parseFrom (InputStream) . А для двоичных сообщений я думаю, что мне нужно parseFrom (Byte []) . Но я не знаю, как мне писать двоичные сообщения. Помощь приветствуется. Моя конечная цель - читать двоичные сообщения в искровом фрейме данных, используя scalapb.

0
Bilal Shafqat 8 Фев 2020 в 10:08

2 ответа

Лучший ответ

Символьные строки не изменяются кодировкой protobuf. Так что, если ваш protobuf содержит адрес электронной почты в виде строкового поля, вы увидите адрес электронной почты в protobuf. И то же самое для телефонных номеров, потому что они обычно хранятся в виде строк, а не целых чисел. (Целочисленные поля не будут легко читаемыми.)

«Двоичный формат» не означает, что данные зашифрованы или скрыты. Это просто означает, что кодировка может включать некоторые байты, которые не являются допустимыми кодами символов (например, 0). Например, Protobuf отправляет длину строки в виде двоичного целого числа, прежде чем отправит строку. Эта длина не читается человеком. ÈÇ, который вы видите, является результатом интерпретации в виде текста двоичных данных (не только длины), связанных с адресом электронной почты.

1
rici 8 Фев 2020 в 08:04

Вы говорите о написании сообщений , так что это означает, что вы должны использовать команду {protoObj}.writeDelimitedTo({an outputstream}) (обратите внимание на характер с разделителями) и читать их с помощью {yourprotodefclass}.parseDelimitedFrom({an inputstream})

0
Antal Attila 20 Фев 2020 в 11:59