次の理由により、バイナリログにプロトコル バッファを使用することを考えています。
- とにかくオブジェクトをエンコードする方法です
- 比較的コンパクトで、読み取り/書き込みなどが高速です。
とはいえ、API はオブジェクト全体の作成に重点を置く傾向があるため、どのように対処すべきかは明らかではありません。そのため、DataLogEntry のリストを DataLogFile の繰り返しフィールドとしてラップすることは、メッセージング用語で行うことですが、私たちが本当に望んでいるのは、DataLogEntry 全体を書き込んでから読み込んで、ファイルの末尾に追加できるようにすることです。
それを行うことで最初に遭遇した問題は、これを行うことです(テストでは:
FileInputStream fileIn = new FileInputStream(logFile);
CodedInputStream in = CodedInputStream.newInstance(fileIn);
while(!in.isAtEnd()) {
DataLogEntry entry = DataLogEntry.parseFrom(in);
// ... do stuff
}
ストリームから読み取られる DataLogEntry は 1 つだけになります。isAtEnd がなければ、停止することはありません。
考え?
編集: entry.writeDelimitedTo と BidLogEntry.parseDelimitedFrom の使用に切り替えましたが、うまくいくようです...