我有一个我正在生成的protobuf消息的ArrayList,我想知道如何用它们生成varint编码的消息。
假设我想要的消息叫做“Foobar”。它将使用protoc --java_out
创建我想要这样做:
VarintFoobarVarintFoobarVarintFoobar
Varint应该代表Foobar之后的长度。
一旦消息被编码成字节数组,下面的代码应该能够撤消所有内容(假设输出是我开始使用的ArrayList,输入是编码的protobuf):
List<Foobar> output = new ArrayList<Foobar>();
CodedInputStream cis = CodedInputStream.newInstance(input);
for (int i = 0; !cis.isAtEnd(); i++) {
int x = cis.readRawVarint32();
output.add(Foobar.parseFrom(cis.readRawBytes(x)));
}