> Поднимается, потому что задач таких много, а KS штука вкусная, судя по
> описаниям, и хочется совместить :)
> 1 - сигнатуры следующего заголовка нет в нужном месте, значит битые. С
> точки зрения автоматического анализа - в том-то и фишка, что тут
> нужно передать всю бинарщину в "умный" код (не декларативный). А от
> него в итоге получить в ответ, где следующий заголовок Ну, в самом тупом виде, в управляющей программе что-то типа:
while (!io.eof()) {
long oldPos = io.pos();
try {
Packet pkt = new Packet(io);
} catch (InvalidDataException e) {
// попали на битые данные
long newPos = oldPos + somePacketSize;
// в этот момент от oldPos до io.pos() - читающаяся часть пакета
// весь пакет, видимо, от oldPos до newPos
// если он нужен как бинарный кусок
io.seek(oldPos);
byte[] brokenPkt = io.readBytes(newPos - oldPos);
// если просто нужно перейти к парсингу с новой позиции
io.seek(newPos);
}
}
Это все на самом деле можно уже сейчас. Простая проверка сигнатур есть в KS чуть лин е самого начала.
> 2 - да, именно это и хочется. Чтобы выкинули и можно было
> самостоятельно сдвинуться, потом вернуть управление. Все равно "весь" объект разом разбирать
> не надо (он может быть длиной и в терабайт, и вообще
> быть живым дописываемом в процессе обработки потоком). Т.е. так сейчас можно?
Выше пример привел.
> Про поправить код руками я, конечно, понимаю, но вот именно для этого
> и хотелось бы использовать Kaitai Struct. Там время от времени формат
> файла меняется, и есть необходимость поддерживать разные версии. Если бы не
> этот факт, можно было и не брать декларативные описания.. а в
> текущих реалиях без них просто будет некрасиво. И, конечно, хотелось бы
> использовать сколько-либо готовое решение, я не писать с нуля автомат. А
> если код менять руками, то как потом менять описание?.. Поменяешь и
> опять вручную на этот код накатывать изменения.. брр.
В общем, если алгоритм выше устраивает - вперед ;)