如何有效地将BitSet转换为二进制字符串?

时间:2016-01-12 15:48:02

标签: java string binary bits bitset

我正在寻找一种如何轻松地将[HttpPut] public HttpResponseMessage Update(EmployeeViewModel model) { if(!empRepository.VerifyEmployeeId(model.Id)) return new HttpResponseMessage(HttpStatusCode.BadRequest); empRepository.Update(model); return new HttpResponseMessage(HttpStatusCode.OK); } [HttpGet] public HttpResponseMessage VerifyEmployee(string id) { var isValid = empRepository.VerifyEmployeeId(string id); return isValid ? new HttpResponseMessage(HttpStatusCode.OK) : new HttpResponseMessage(HttpStatusCode.BadRequest); } 转换为二进制字符串的有效方法。让我们说它通常的长度将是数千位。

例如,让我们拥有:

BitSet

这是理想的结果:

BitSet bits = new BitSet(8);
bits.set(1);
bits.set(3);

我总体上有一些想法(溪流等),但可能会有一些明显缺乏的标准方法。

2 个答案:

答案 0 :(得分:2)

所以这是我迄今为止尝试过的最有效的方式:

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();
}

答案 1 :(得分:-1)

String bitsStr = String.format(“%8s”,Integer.toBinaryString(bits.toByteArray()[0]&0xFF))。replace('','0');