我在一个小的Java项目的工作目标是一个位集合转换成数位集,以及0字节,然后将这些字节的多个阵列:如何转换虚假初始化一个bitset在Java中
对于例如,我想在两个部分位集合分裂和各部分转换成一个int:
byte[] bytesToBeConverted = {(byte)0x05, (byte)0x00};
BitSet bitSetToBeConverted = BitSet.valueOf(bytesToBeConverted);
BitSet BitSetPart1 =new BitSet(8);
BitSetPart1=bitSetToBeConverted.get(0,8);
int intPart1 = (int)(BitSetPart1.toByteArray()[0]); //intPart1 ==5
BitSet BitSetPart2 =new BitSet(8);
BitSetPart2 = bitSetToBeConverted.get(8,16);
int intPart2 = (int)(BitSetPart2.toByteArray()[0]); //intPart2 == 0 is wanted
而没有问题确实发生在所述第一部分(转换bitSetPart1成intPart1),第二部分,其中BitSetpart2具有用false初始化时,会在访问方法的结果toByteArray()时引发异常:java.lang.ArrayIndexOutOf BoundsException toByteArray在这种情况下似乎返回null。
这是否意味着零是该类操作的禁用价值? 在这种情况下,你宁愿扩展BitSet类并覆盖toByteArray()方法吗? 或创建一个与BitSet完全分离的类,并使用额外的方法来解决该问题?
还是有另一种方式来执行我没有提到的那种操作?
非常感谢您的回答!
非常感谢!更一般的情况是,你宁愿重写扩展类中的toByteArray()方法或创建一个静态方法来封装原始BitSet.toByteArray()? –
@Kate_Bush重写'toByteArray'方法会破坏它的合约。一般来说,如果你不能确保(或故意打破)Liskov替代原则,继承不是答案。 – alf
确实。提供另一种方法从'BitSet'获取所需的输出;不要延长或违反合同。 (事实上,它应该是最终的......) –