# String komprimieren - Kürzen ohne Informationsverlust?



## Extremefall (4. Jan 2013)

Hallo,
ich habe einen String mittels RSA verschlüsselt und davon den Hex Code des Byte Arrays in die DB eimgetrangen. Ich Trage mittels BasicValueNamePairs es in die DB an. 
Probleme gibt es bei extrem langem Strings, da die Zeichenkette zu lang wird.

Wie kann ich nun eine Zeichenkette kürzen, sodass das eintragen in die Db klappt?
Ich dachte an einen Hash, aber wie kann man den schnell entschlüsseln? Was schlagt ihr vorl, um einen Strong ohne Informationsverlust zu kürzen?


----------



## fastjack (4. Jan 2013)

Zippen?


----------



## Spacerat (4. Jan 2013)

Datenkompression ? Wikipedia


----------



## Extremefall (4. Jan 2013)

Das hilft mir momentan nicht ganz  weiter.Ich habe einen Input String, der Komprimiert einen String zurückliefern soll. Wie geht das genau? Die Beispiele liefern meist eim byte Array zurück.


----------



## ARadauer (4. Jan 2013)

bzw einfach als Lob speichern...


----------



## SlaterB (4. Jan 2013)

Extremefall hat gesagt.:


> Das hilft mir momentan nicht ganz  weiter.Ich habe einen Input String, der Komprimiert einen String zurückliefern soll. Wie geht das genau? Die Beispiele liefern meist eim byte Array zurück.



im Link von Spacerat wird auch explizit von Text gesprochen:

```
Ausgangstext: AUCH EIN KLEINER BEITRAG IST EIN BEITRAG
  Kodiertext: AUCH EIN KLEINER BEITRAG IST -4 -3
```

das Thema ist natürlich hochkomplex, da kann man selber Wochen programmieren,
wenn was gutes wie Zip rauskommen soll noch viel länger

die meisten bekannten Verfahren wie Zip sind gleich für bytes gedacht, 
für String habe ich bisher nie etwas konkretes im Einsatz gesehen


----------



## Extremefall (4. Jan 2013)

Oder lässt sich ein Byte[] ohne große Längenzunahme in einen String umformen? Inhalte sollen natürlich nicht verloren gehen. Ich nutze momentan nämlich die Umwandlung in einen Hex-String, wodurch es erst so lang wird.


----------



## ARadauer (4. Jan 2013)

Character Large Object ? Wikipedia


----------



## hüteüberhüte (4. Jan 2013)

Shannon-Fano-Kodierung ist ganz gut und sehr einfach zu implementieren, das Verfahren und ein zweites angewendet, habe ich mal einen Wettbewerb gewonnen.


----------



## Extremefall (4. Jan 2013)

@ARadauer: Das Problem scheint die Übermittlung zu sein. Speichern in der Datenbank funktioniert. 
Ich probiere es erst mal mit der Lauflängenkodierung.


----------



## TheDarkRose (4. Jan 2013)

hüteüberhüte hat gesagt.:


> Shannon-Fano-Kodierung ist ganz gut und sehr einfach zu implementieren, das Verfahren und ein zweites angewendet, habe ich mal einen Wettbewerb gewonnen.



Shannon-Fano ist nur effektiv, wenn sich die Wahrscheinlichkeiten gut verteilen. Ansonsten ist der Huffmann immer gleich gut oder besser, erfordert aber ein Dictionary zum decodieren.


----------



## ARadauer (4. Jan 2013)

Extremefall hat gesagt.:


> @ARadauer: Das Problem scheint die Übermittlung zu sein. Speichern in der Datenbank funktioniert.
> Ich probiere es erst mal mit der Lauflängenkodierung.



pff.. neue Netzwerkabel kaufen ;-)


----------



## Extremefall (4. Jan 2013)

Nein, es liegt wohl am BasicNameValuePair. Da funktioniert es nicht bei langen Strings. Ich habe wo gelesen, dass die Länge dort begrenzt sein soll. Aber das weiß ich nicht genau. Es handelt sich um Android Programmierung.


----------



## Marco13 (4. Jan 2013)

Das mit dem Android kann man auch früher mal erwähnen ... Ansonsten: Das, was du (vermutlich?!) suchst, ist schon in der JavaDoc beschrieben: Deflater (Java Platform SE 6)


----------

