¿Cómo analizar / codificar formatos de mensajes binarios?

Necesito analizar y codificar un formato de mensaje binario heredado en Java. Comencé usando DataOutputStream para leer / escribir tipos primitivos, pero el problema que tengo es que el formato del mensaje no se alinea bien con los desplazamientos de bytes e incluye indicadores de bits.

Por ejemplo, tengo que lidiar con mensajes como este:

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

Where (b) es una bandera de un bit. El problema es que los tipos primitivos de Java no se alinean con los límites de bytes, por lo que no podría usar DataOutputStream para codificar esto, ya que el tipo de nivel más bajo que puedo escribir es un byte.

¿Existe alguna biblioteca, estándar o de terceros, para tratar con formatos arbitrarios de mensajes de nivel de bits?

Edit: Gracias a @Software Monkey por obligarme a mirar mis especificaciones más de cerca. La especificación que estoy usando en realidad se alinea con los límites de bytes, por lo que DataOutputStream es apropiado. Sin embargo, dada mi pregunta original, habría optado por la solución propuesta por @ emboss.

Edit: Aunque se descubrió que el formato del mensaje para esta pregunta estaba en los límites de bytes, he encontrado otro formato de mensaje que es aplicable a la pregunta original. Este formato define una asignación de caracteres de 6 bits donde cada carácter realmente solo ocupa 6 bits, no el byte completo, por lo que las cadenas de caracteres no se alinean en los límites de los bytes. He descubierto varias secuencias de salida binarias que abordan este problema. Como éste:http: //introcs.cs.princeton.edu/java/stdlib/BinaryOut.java.htm

Respuestas a la pregunta(5)

Su respuesta a la pregunta