Я смотрю на выходе команды protoc --decode, и я не могу понять кодировку, когда он встречает байт:Что такое кодировка двоичного кода, используемая protoc -decode?
data {
image: "\377\330\377\340\000\020JFIF\000\001[…]\242\2634G\377\331"
}
код [...] был добавлен мной, чтобы сократить выход.
Что такое кодирование?
Редактировать
Так на основе ответа Брюса я написал свою собственную утилиту для того, чтобы генерировать выборки данных из сценария оболочки:
public static void main(String[] parameters) throws IOException {
File binaryInput = new File(parameters[0]);
System.out.println("\""+TextFormat.escapeBytes(ByteString.readFrom(new FileInputStream(binaryInput)))+"\"");
}
}
что путь я могу назвать сериализации мои двоичные файлы и вставить их в текстовую сериализацию protobuf до вызова protoc --encode на нем:
IMAGE=$(mktemp)
OUTPUT=$(mktemp)
BIN_INSTANCE=$(mktemp)
echo -n 'capture: ' > $IMAGE
java -cp "$HOME/.m2/repository/com/google/protobuf/protobuf-java/3.0.0/protobuf-java-3.0.0.jar:target/protobuf-generator-1.0.0-SNAPSHOT.jar" protobuf.BinarySerializer image.jpg >> $IMAGE
sed -e 's/{UUID}/'$(uuidgen)'/' template.protobuf > $OUTPUT
sed -i '/{IMAGE}/ {
r '$IMAGE'
d
}' $OUTPUT
cat $OUTPUT | protoc --encode=prototypesEvent.proto> $BIN_INSTANCE
с template.protobuf существа:
uuid: "{UUID}"
image {
capture: "{IMAGE}"
}
Вопрос о бонусе: что такое ** цель ** этого формата? Стандарт де-факто для отображения двоичных файлов - это печать их шестнадцатеричных значений. Почему кто-то подумал, что было хорошей идеей отображать восьмеричные значения? И еще больше раздражает, почему они заменяют некоторые байтовые значения соответствующими символами ASCII в этом странном формате вывода? – Alderath