Array de Bytes em Java

Olá Pessoal.

Estou com o seguinte prolblema.

Tenho o seguinte código que vai me gerar uma sequência de 0’s e 1’s.

        String seq = "1";
        for(Stream s : getSequencia()){
            seq= s.isAtivo() ? "1"+seq : "0"+seq;
        }

No entanto quando vou salvar, cada caractere/símbolo acaba ocupando 1byte (8 bits).

Alguém saberia me dizer como que eu poderia fazer para graver cada um dos meus símbolos em apenas 1 bit, no caso em cada byte eu queria armazenar 8 bits.

Para certas coisas você pode usar um BitSet : http://docs.oracle.com/javase/6/docs/api/java/util/BitSet.html

Para outras, você vai ter de manualmente compactar os bits dentro dos bytes, usando operações “<<” e “|”. Vou dar um exemplo rebuscado.

// Objetivo: criar um byte que é a sequência binária 1010.0101
int x = 0;
x = (x << 1) | 1; // [1]010.0101
x = (x << 1) | 0; // 1[0]10.0101
x = (x << 1) | 1; // 10[1]0.0101
x = (x << 1) | 0; // 101[0].0101
x = (x << 1) | 0; // 1010.[0]101
x = (x << 1) | 1; // 1010.0[1]01
x = (x << 1) | 0; // 1010.01[0]1
x = (x << 1) | 1; // 1010.010[1]
System.out.println (Integer.toBinaryString (x)); // deve imprimir 10100101
byte b = (byte) x; // aqui está seu byte contendo a sequência binária 1010.0101

Se tiver usando java 7 já é mais simples…

		int b = 0b00000001;//1
		
		b += 0b10000000;//128
		b += 0b00000010;//2
		b += 4;
		
		System.out.println(Integer.toBinaryString (b));
		System.out.println(b);

@magostta .

Se eu utilizar nesse modo que você sugeriu, ele não vai continuar gravando 1 byte para cada bit (1 ou 0) ?