2017-04-21 1 views
9

Je veux compresser une chaîne (un document XML) dans Java et le stocker dans Cassandra db comme varchar. Je devrais être capable de le décompresser en lisant depuis db. J'ai regardé dans GZIP et lz4 et tous les deux retournent un tableau d'octets sur la compression.Obtenir une chaîne à partir des données compressées et vice versa dans Java

Mon but est d'obtenir une chaîne à partir des données compressées qui peuvent également être utilisées pour décompresser et récupérer la chaîne d'origine. Quelle est la meilleure approche possible?

+0

Votre schéma XML est-il corrigé? –

+0

Non c'est pas fixé. –

+0

Quelle est la taille de ces documents et avez-vous le schéma XML? – ThomasRS

Répondre

3

Je ne vois pas de bonnes raisons pour vous de compresser vos données: Cassandra peut le faire pour vous de manière transparente (il va LZ4 vos données par défaut). Donc, si votre objectif est de réduire votre empreinte de données, alors vous avez un problème inexistant, et je transmettrais le document XML directement à C *. À propos, tous les algorithmes de compression prennent un tableau d'octets et produisent un tableau d'octets. En tant que solution, vous pouvez appliquer quelque chose comme un encodage base64 à votre tableau d'octets compressé. En décompression, inversez la logique: décodez base64 votre chaîne puis appliquez votre algorithme de décompression.

0

Pas assez de réputation pour commenter alors l'envoi comme réponse. Si vous souhaitez récupérer une chaîne, une compression importante dépendra de vos données. Une solution très simple pourrait être quelque chose comme Java compressing Strings mais cela fonctionnerait si votre chaîne est seulement des caractères et aucun nombre. Vous pouvez modifier cette solution pour qu'elle fonctionne pour la plupart des personnages, mais si vous n'avez pas de caractères répétés, vous pouvez obtenir une chaîne plus grande que celle d'origine.