将字节转换为BitSet

时间:2013-03-06 14:50:34

标签: java byte bitset

我试图找出一种从文件中获取数据的方法,我想将每4个字节存储为一个bitset(32)。我真的不知道该怎么做。我已经玩过将文件中的每个字节存储在一个数组中,然后尝试将每4个字节转换为一个bitset,但我真的无法使用bitset来解决问题。关于如何解决这个问题的任何想法?

FileInputStream data = null;
try 
{ 
     data = new FileInputStream(myFile); 
} 
catch (FileNotFoundException e) 
{ 
     e.printStackTrace(); 
} 
ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
byte[] b = new byte[1024]; 
int bytesRead; 
while ((bytesRead = data.read(b)) != -1) 
{ 
       bos.write(b, 0, bytesRead); 
} 
byte[] bytes = bos.toByteArray(); 

1 个答案:

答案 0 :(得分:0)

好的,你得到了你的字节数组。现在你必须将每个字节转换为一个bitset。

//Is number of bytes divisable by 4
bool divisableByFour = bytes.length % 4 == 0;

//Initialize BitSet array
BitSet[] bitSetArray = new BitSet[bytes.length / 4 + divisableByFour ? 0 : 1];

//Here you convert each 4 bytes to a BitSet
//You will handle the last BitSet later.
int i;
for(i = 0; i < bitSetArray.length-1; i++) {
    int bi = i*4;
    bitSetArray[i] = BitSet.valueOf(new byte[] { bytes[bi], bytes[bi+1], bytes[bi+2], bytes[bi+3]});
}

//Now handle the last BitSet. 
//You do it here there may remain less than 4 bytes for the last BitSet.
byte[] lastBitSet = new byte[bytes.length - i*4];
for(int j = 0; j < lastBitSet.length; j++) {
    lastBitSet[i] = bytes[i*4 + j]
}

//Put the last BitSet in your bitSetArray
bitSetArray[i] = BitSet.valueOf(lastBitSet);

我希望这对你很有用,因为我写得很快,并没有检查它是否有效。但这给了你基本的想法,这是我一开始的意图。