Мне нужно проанализировать и закодировать в устаревший двоичный формат сообщений в 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