Tag: 位字段

在Java中实现C风格的位域

我有一个问题,我有点困惑,一位同事告诉我,这将是一个寻求帮助的好地方。 我试图在Java中实现C风格的位域。 这是一个粗略的例子(此时我没有在我面前的实际代码)。 typedef union { typedef struct { unsigned short a :1; unsigned short b :1; unsigned short c :2; unsigned short d :10; } bitfield; unsigned short bitmap; }example_bitfield; 遗留代码中我有一些类似的样式位域。 我需要为Java提供等效方法的原因是我正在研究将使用Java与使用UDP的其他遗留应用程序进行通信的代码。 我没有重写代码的选项。 我知道这种方法不可移植,有字节序问题(和填充/对齐等),并且如果我能够重写代码,可以更好地完成。 不幸的是,我需要回答这个非常具体的问题。 系统已关闭,因此我不需要担心编译器/操作系统等每一种可能的组合。 使用Java EnumSet的方法不起作用,因为我相信只允许每个值为一位。 我需要能够打包值,例如d占用10位的值。 我知道Java Bitset但它有局限性。 我使用的是旧版本的Java,因此我没有一些较新的Java Bitset方法(即可能肯定有帮助的valueOf方法)。 有没有人有任何关于如何使其尽可能易于管理的想法? 我有超过10个位域需要为我的通信实现。 感谢您提供任何帮助!

在现代Java 8 API中使用位域而不是EnumSet的理由

EnumSet ,与enum本身一样古老(自Java 5开始),应该是位域用例的非妥协替代品:与位域一样快速和精简(好吧,除了不是原始类型),以及类型安全开机 另一方面,最新和多年来最受期待的Java API-Streams API – Spliterator地为Spliterator的特性使用了位域。 我是否应该认为上述内容是核心Java专家明确承认EnumSet毕竟不是那么好? 我是否应该重新考虑从不使用位域的常见最佳实践建议?