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();
これはこのようにすることを意図したものですか、それとも何か間違ったことをしていますか? ありがとうございました。