区切られた複数のメッセージ (数千単位) を含むファイルを読み込もうとしていますが、Google protobufs を使用してこれを適切に行うにはどうすればよいですか?
これは私が区切られたものを書いている方法です:
MyMessage myMessage = MyMessage.parseFrom(byte[] msg);
myMessage.writeDelimitedTo(FileOutputStream);
これが区切りファイルの読み取り方法です。
CodedInputStream is = CodedInputStream.newInstance(new FileInputStream("/location/to/file"));
while (!is.isAtEnd()) {
int size = is.readRawVarint32();
MyMessage msg = MyMessage.parseFrom(is.readRawBytes(size));
//do stuff with your messages
}
この質問で受け入れられた答えは、区切られたバイトを読み取るために .parseDelimitedFrom() を使用すると言うので、私はちょっと混乱しています。Google プロトコル バッファ - メッセージをファイルに保存する
ただし、.parseDelimitedFrom() を使用すると、最初のメッセージのみが読み取られます。(parseDelimitedFrom() を使用してファイル全体を読み取る方法がわかりません)。
このコメントは、CodedOutputStream を使用して区切られたメッセージを書き込むことを示しています: Google プロトコル バッファ - ファイルへのメッセージの保存(つまり、writer.writeRawVariant())。現在、このコメントの実装を使用してファイル全体を読み取っています。writeDelimitedTo() は基本的に同じことをしますか
writer.writeRawVarint32(bytes.length);
と
writer.writeRawBytes(bytes);
また、区切られたメッセージで構成されるファイル全体を読み取るのに私の方法が適切でない場合は、どのようなものか教えていただけますか?
ありがとうございました。