Обработка предупреждения очереди хроники: «Чтение управляющего кода в виде текста»
Я читаю предоставленный файл Chronicle Queue через tailer. При создании хвостовика я получаю предупреждающее сообщение:
"чтение управляющего кода в виде текста"
Кажется, есть определенный раздел(ы) файла, из-за которого регистрируется это предупреждение. Остальные записи в файле в порядке. Есть ли способ пропустить этот раздел файла или предотвратить создание этого предупреждающего сообщения, вероятно, из-за того, как файл был написан? Может ли это произойти, если версия записи и версия хроники-очереди различаются?
boolean hasData = true;
while (hasData) {
try (final DocumentContext dc = tailer.readingDocument()) {
if (hasData = dc.isPresent()) {
ValueIn valueIn = dc.wire().read();
System.out.print(valueIn.readLong());
System.out.print(valueIn.text());
System.out.print(valueIn.readInt());
System.out.print(valueIn.readInt());
System.out.println();
}
else{
System.out.println("end of file");
break;
}
}
}
Chronicle Queue: 5.22.18
1 ответ
Это означает, что что-то было прочитано как текст, но вместо этого было случайным фрагментом данных, которого он не ожидал. Если вам нужен более гибкий подход к изменениям схемы, я предлагаю написать DTO, например
class MyData extends SelfDescribingMarsahallable {
long timestamp;
String text;
int num1, num2;
}
interface IData {
void data(MyData data);
}
IData idata = appender.methodWriter(IData.class);
idata.data(myData);
IData idata2 = d -> System.out.println(d);
MethodReader reader = tailer.methodReader(idata);
while(reader.readOne()) {
// read until empty
}
Вы можете писать на более низком уровне, как у вас; однако вы должны рассмотреть возможность обработки различных типов сообщений, версий и изменений схемы самостоятельно.