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) ?