Декодировать jpeg примерно так представляю я:
jpeg
[FF D8] — маркер начала.
[FF FE] — маркер, означающий начало секции с комментарием.
[** **] — длина секции (включая эти 2 байта длины) комментария.
[FF **] — просто маркер секции.
[** **] — длинна секции включая эти 2 байта длины
[FF DB] — секция: таблица квантования.
[** **] — длина секции (включая эти 2 байта длины) таблицы квантования.
[FF C0] — маркер SOF0
[** **] — длина вкл.2б
[FF C4] — маркер DHT (таблица Хаффмана)
[** **] — длина вкл2б
[FF DA] — SOS (Start of Scan)
[** **] — Длина заголовочной части (а не всей секции)
[**]+ — закодированные данные.
[FF D9] — маркер конца.
Scanner sc;
sc = new Scanner(new File("input.xz"));
byte r;
boolean ff;
boolean begin;
while(sc.hasNextByte()){
r=sc.nextByte();
if(r==0xFF){
ff=true;
continue;//исключение последовательностей FF FF FF
}
if(ff==true){
ff=false;
if(r==0xD8){
begin=true;
//TODO дописать
}
}
}