【发布时间】:2012-12-11 12:43:57
【问题描述】:
我有这个应用程序,我应该大量使用BitSet 类并一点一点地写入文件。我知道我不能将位写入文件,所以首先我将BitSet 对象转换为字节数组并写入字节数组。但问题是因为BitSet 类从right to left 索引,当我将BitSet 对象转换为字节数组并写入文件时,它会向后写入。
例如这是我的 BitSet 对象:
10100100
BitSet.get(0) 给出 false,而 BitSet.get(7) 给出 true。我想把它写到文件中:
00100101
所以第一位是 0,最后一位是 1。
我的转换方法:
public static byte[] toByteArray(BitSet bits)
{
byte[] bytes = new byte[(bits.length() + 7) / 8];
for (int i = 0; i < bits.length(); i++) {
if (bits.get(i)) {
bytes[bytes.length - i / 8 - 1] |= 1 << (i % 8);
}
}
return bytes;
}
我的写法:
FileOutputStream fos = new FileOutputStream(filePath);
fos.write(BitOperations.toByteArray(cBitSet));
fos.close();
这是故意的还是我做错了什么?谢谢。
【问题讨论】:
-
你如何使用这个文件?你以后用java读过它来恢复BitSet吗?
-
我将此文件作为字节数组读取,并在需要时将其转换为 BitSet,但使用外部二进制查看器时,它也会向后看。