К примеру, воспринимать буфер как поток байт, как только чтение доходит до конца, то подгружать следующую порцию и сбрасывать указатель на начало. При декодировании не полагаться на жёстко закодированные смещения типа a[i+1], a[i+2], a[i+3] и т.п., а получать следующий байт как-нибудь типа того: mybuffer.getNextByte() (в свою очередь, метод getNextByte должен обрабатывать ситуацию, когда буфер исчерпан, и в таком случае подгружать следующую порцию байт)