我需要解析并编码为Java中的传统二进制消息格式.我首先使用DataOutputStream来读取/写入基本类型,但我遇到的问题是消息格式与字节偏移不完全对齐并包括位标志.
例如,我必须处理这样的消息:
+----------+---+---+----------+---------+--------------+
+uint32 +b +b + uint32 +4bit enum+32 byte string+
+----------+---+---+----------+---------+--------------+
Run Code Online (Sandbox Code Playgroud)
其中(b)是一位标志.问题是java原语类型没有与字节边界对齐,因此我无法使用DataOutputStream对此进行编码,因为我可以写入的最低级别类型是一个字节.
是否有任何库,标准或第三方处理任意位级消息格式?
编辑:感谢@Software Monkey强迫我更仔细地查看我的规范.我正在使用的规范确实在字节边界上对齐,因此DataOutputStream是合适的.鉴于我原来的问题,虽然我会选择@emboss提出的解决方案.
编辑:虽然发现此问题的消息格式是在字节边界上,但我遇到了另一种适用于原始问题的消息格式.这种格式定义了一个6位字符映射,其中每个字符实际上只占用6位,而不是整个字节,因此字符串不在字节边界上对齐.我发现了几个解决这个问题的二进制输出流.像这样:http://introcs.cs.princeton.edu/java/stdlib/BinaryOut.java.html