如何有效的BitSet转换为二进制字符串? [英] How to convert BitSet to binary string effectively?

查看:512
本文介绍了如何有效的BitSet转换为二进制字符串?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要寻找一种有效的方式如何轻松转换位集合来二进制字符串。让我们说,它的通常长度为数千位。

I am looking for an efficient way how to easily convert a BitSet to a binary string. Let us say that its usual length would be thousands of bits.

例如,让我们有这样的:

For example, lets have this:

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

和,这是所期望的结果:

And this is the desired result:

String result = toBinaryString(bits);
// expected: result = "01010000"

我有一些普遍的想法(流等),但可能有一些明显的标准方法,我只是缺少。

I have some ideas in general (streams, etc.), but there might be some obvious standard method I am just missing.

推荐答案

所以这是最有效的方式到目前为止,我曾尝试:

So this is the most efficient way I have tried so far:

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

或使用更流,另一种方式:

Or other way using more streams:

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

这篇关于如何有效的BitSet转换为二进制字符串?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆