我在一個小的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'獲取所需的輸出;不要延長或違反合同。 (事實上,它應該是最終的......) –