2016-01-12 5 views
2

Я ищу эффективный способ преобразования BitSet в двоичную строку. Скажем, что его обычная длина будет равна тысячам бит.Как эффективно преобразовать BitSet в двоичную строку?

Например, позволяет иметь это:

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

И это желаемый результат:

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

У меня есть некоторые идеи в целом (потоки и т.д.), но там могут быть некоторые очевидный стандартный метод. Я просто отсутствую.

ответ

0

Так что это самый эффективный способ, который я пытался до сих пор:

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

 Смежные вопросы

  • Нет связанных вопросов^_^