Мы думаем об использовании буферов протокола для двоичного ведения журнала, потому что:
- Так или иначе мы кодируем наши объекты
- Это относительно компактный, быстрый для чтения / записи и т. Д.
Тем не менее, не очевидно, как мы должны это делать, потому что API, как правило, фокусируются на создании целых объектов, поэтому завершение списка DataLogEntry как повторяющегося поля в DataLogFile было бы тем, что вы бы сделали в обмене сообщениями термины, но то, что мы действительно хотим, это просто иметь возможность написать, а затем прочитать весь DataLogEntry, добавив его в конец файла.
Первая проблема, с которой мы столкнулись, это то, что мы делаем это (в тесте:
FileInputStream fileIn = new FileInputStream(logFile);
CodedInputStream in = CodedInputStream.newInstance(fileIn);
while(!in.isAtEnd()) {
DataLogEntry entry = DataLogEntry.parseFrom(in);
// ... do stuff
}
В результате только 1 DataLogEntry читается из потока. Без isAtEnd он никогда не останавливается.
Мысли
Редактировать: я переключился на использование entry.writeDelimitedTo и BidLogEntry.parseDelimitedFrom, и это, похоже, работает ...