Ну, нет никакой гарантии, что вы не найдете FFD9 внутри изображения JPEG. Лучший способ найти конец изображения в формате JPEG - это проанализировать его. За каждым маркером, кроме FFD0 – FFD9 и FF01 (зарезервировано), сразу же следует спецификатор длины, который даст вам длину этого сегмента маркера, включая спецификатор длины, но не маркер. FF00 не является маркером, но для ваших целей вы можете рассматривать его как маркер без спецификатора длины.
Спецификатор длины имеет длину два байта, и он имеет порядковый номер. Итак, что вы будете делать, это искать FF, и если следующий байт не равен 0x00, 0x01 или 0xD0-0xD8, вы читаете спецификатор длины и пропускаете вперед в потоке, пока спецификатор длины говорит минус два байта.
Кроме того, каждый маркер может быть дополнен в начале любым количеством FF.
Когда вы попадаете в FFD9, вы находитесь в конце потока.
Конечно, вы можете читать поток слово в слово, ища FF, если вы хотите производительность, но это оставлено в качестве упражнения для читателя. ; -)