G
Guest
Gast
hi,
ich habe einen BitSet, welches ich in einen stream schreiben möchte. geschwindigkeit ist ist nicht so wichtig, kompression sollte aber maximal sein. standart ist ein bit in einem byte - nicht sehr sinnvoll
. daher habe ich versucht, die kapazität voll auszunutzen und 8 bits in einen byte zu packen. gibt es denn schon eine klasse die das für mich erledigt?
hab mich selber mal dran probiert - bin noch nicht lang bei java, ergebnis sieht nicht so toll aus...
abgesehen davon, dass das auch einfacher gehen muss, funktioniert das noch nicht ganz. (encodieren und wieder decodieren erhält die werte nicht, sondern einpaar trues werden zu falses)
wäre für einpaar tips sehr dankbar
cya,
remo
ich habe einen BitSet, welches ich in einen stream schreiben möchte. geschwindigkeit ist ist nicht so wichtig, kompression sollte aber maximal sein. standart ist ein bit in einem byte - nicht sehr sinnvoll
hab mich selber mal dran probiert - bin noch nicht lang bei java, ergebnis sieht nicht so toll aus...
abgesehen davon, dass das auch einfacher gehen muss, funktioniert das noch nicht ganz. (encodieren und wieder decodieren erhält die werte nicht, sondern einpaar trues werden zu falses)
Code:
public byte[] encode(BitSet bits) {
byte bytes[] = new byte[(bits.length() / 8) + 1];
int step = 0;
int n = 0;
int t;
while(n <= to) {
t = -128;
if(bits.get(n++)) t += 128;
if(bits.get(n++)) t += 64;
if(bits.get(n++)) t += 32;
if(bits.get(n++)) t += 16;
if(bits.get(n++)) t += 8;
if(bits.get(n++)) t += 4;
if(bits.get(n++)) t += 2;
if(bits.get(n++)) t += 1;
bytes[step++] = (byte) t;
}
return bytes;
}
public BitSet decode(byte[] bytes) {
BitSet bits = new BitSet(bytes.length*8);
int t;
for(int i = 0; i < bytes.length; i++) {
t = ((int) bytes[i])+128;
if(t > 128) bits.set(i*8);
if(t%128 > 64) bits.set((i*8)+1);
if(t%64 > 32) bits.set((i*8)+2);
if(t%32 > 16) bits.set((i*8)+3);
if(t%16 > 8) bits.set((i*8)+4);
if(t%8 > 4) bits.set((i*8)+5);
if(t%4 > 2) bits.set((i*8)+6);
if(t%2 > 1) bits.set((i*8)+7);
}
return bits;
}
wäre für einpaar tips sehr dankbar
cya,
remo