如何有效地将 BitSet 转换为二进制字符串?
How to convert BitSet to binary string effectively?
我正在寻找一种有效的方法来轻松地将 BitSet
转换为二进制字符串。假设其通常长度为数千位。
例如,我们有这个:
BitSet bits = new BitSet(8);
bits.set(1);
bits.set(3);
这是期望的结果:
String result = toBinaryString(bits);
// expected: result = "01010000"
我有一些一般的想法(流等),但可能有一些明显的标准方法我只是缺少。
所以这是我迄今为止尝试过的最有效的方法:
private static class FixedSizeBitSet extends BitSet {
private final int nbits;
public FixedSizeBitSet(final int nbits) {
super(nbits);
this.nbits = nbits;
}
@Override
public String toString() {
final StringBuilder buffer = new StringBuilder(nbits);
IntStream.range(0, nbits).mapToObj(i -> get(i) ? '1' : '0').forEach(buffer::append);
return buffer.toString();
}
}
或使用更多流的其他方式:
@Override
public String toString() {
return IntStream
.range(0, nbits)
.mapToObj(i -> get(i) ? '1' : '0')
.collect(
() -> new StringBuilder(nbits),
(buffer, characterToAdd) -> buffer.append(characterToAdd),
StringBuilder::append
)
.toString();
}
String bitsStr = String.format("%8s", Integer.toBinaryString(bits.toByteArray()[0] & 0xFF)).replace(' ', '0');
我正在寻找一种有效的方法来轻松地将 BitSet
转换为二进制字符串。假设其通常长度为数千位。
例如,我们有这个:
BitSet bits = new BitSet(8);
bits.set(1);
bits.set(3);
这是期望的结果:
String result = toBinaryString(bits);
// expected: result = "01010000"
我有一些一般的想法(流等),但可能有一些明显的标准方法我只是缺少。
所以这是我迄今为止尝试过的最有效的方法:
private static class FixedSizeBitSet extends BitSet {
private final int nbits;
public FixedSizeBitSet(final int nbits) {
super(nbits);
this.nbits = nbits;
}
@Override
public String toString() {
final StringBuilder buffer = new StringBuilder(nbits);
IntStream.range(0, nbits).mapToObj(i -> get(i) ? '1' : '0').forEach(buffer::append);
return buffer.toString();
}
}
或使用更多流的其他方式:
@Override
public String toString() {
return IntStream
.range(0, nbits)
.mapToObj(i -> get(i) ? '1' : '0')
.collect(
() -> new StringBuilder(nbits),
(buffer, characterToAdd) -> buffer.append(characterToAdd),
StringBuilder::append
)
.toString();
}
String bitsStr = String.format("%8s", Integer.toBinaryString(bits.toByteArray()[0] & 0xFF)).replace(' ', '0');