Я бы написал себе утилитку, которая принимает какое-то представление парсера в виде данных и собирает из него функцию, которая принимает ByteBuffer и допустим возвращает вектор спаршенных полей
А если есть возможность изменить протокол у передающей стороны, можно перейти на общее определение с помощью какого-нибудь protobuf, и из него генерить код для обеих сторон.