Как анализировать / кодировать двоичные форматы сообщений?

Мне нужно проанализировать и закодировать в устаревший двоичный формат сообщений в Java. Я начал с использования DataOutputStream для чтения / записи примитивных типов, но проблема, с которой я столкнулся, заключается в том, что формат сообщения плохо согласуется с байтовыми смещениями и включает битовые флаги.

Например, мне приходится иметь дело с такими сообщениями:

+----------+---+---+----------+---------+--------------+
+uint32    +b   +b + uint32   +4bit enum+32 byte string+
+----------+---+---+----------+---------+--------------+

Где (b) - однобитовый флаг. Проблема в том, что примитивные типы java не выравниваются по границам байтов, поэтому я не смог бы использовать DataOutputStream для кодирования этого, поскольку тип самого низкого уровня, который я могу написать, - это байт.

Существуют ли какие-либо библиотеки, стандартные или 3-е стороны, для работы с произвольными форматами сообщений битового уровня?

Редактировать: Спасибо @Software Monkey за то, что заставил меня более внимательно посмотреть на мою спецификацию. Спецификация, которую я использую, фактически выравнивается по границам байтов, поэтому DataOutputStream подходит. Учитывая мой первоначальный вопрос, я бы пошел с решением, предложенным @emboss.

Изменить: Хотя было обнаружено, что формат сообщения для этого вопроса находится на границах байтов, я столкнулся с другим форматом сообщения, применимым к исходному вопросу. Этот формат определяет 6-битное отображение символов, где каждый символ действительно занимает только 6 бит, а не полный байт, поэтому символьные строки не выравниваются по границам байтов. Я обнаружил несколько двоичных выходных потоков, которые решают эту проблему. Как этот: http: //introcs.cs.princeton.edu / java / stdlib / BinaryOut.java.html

7
задан kenen 9 September 2011 в 16:08
поделиться