Saltar al contenido

¿Cómo comprimir una cadena en Java?

Solución:

Los algoritmos de compresión casi siempre tienen algún tipo de sobrecarga de espacio, lo que significa que solo son efectivos cuando se comprimen datos que son lo suficientemente grandes como para que la sobrecarga sea menor que la cantidad de espacio ahorrado.

Comprimir una cadena de solo 20 caracteres no es demasiado fácil y no siempre es posible. Si tiene repetición, la codificación Huffman o la codificación de longitud de ejecución simple podrían comprimir, pero probablemente no mucho.

Cuando crea una cadena, puede pensar en ella como una lista de caracteres, esto significa que para cada carácter en su cadena, debe admitir todos los valores posibles de char. De los documentos del sol

carbonizarse: El tipo de datos char es un solo carácter Unicode de 16 bits. Tiene un valor mínimo de ‘ u0000’ (o 0) y un valor máximo de ‘ uffff’ (o 65,535 inclusive).

Si tiene un conjunto reducido de caracteres que desea admitir, puede escribir un algoritmo de compresión simple, que es análogo a binary-> decimal-> hexadecimal radix converstion. Pasa de 65.536 (o la cantidad de caracteres que admita su sistema de destino) a 26 (alfabético) / 36 (alfanumérico), etc.

He usado este truco varias veces, por ejemplo, codificando marcas de tiempo como texto (destino 36 +, fuente 10). ¡Solo asegúrate de tener muchas pruebas unitarias!

Si las contraseñas son más o menos “aleatorias” no tiene suerte, no podrá obtener una reducción significativa de tamaño.

Pero: ¿Por qué necesitas comprimir las contraseñas? ¿Quizás lo que necesita no es una compresión, sino algún tipo de valor hash? Si solo necesita verificar si un nombre coincide con una contraseña dada, no necesita guardar la contraseña, pero puede guardar el hash de una contraseña. Para verificar si una contraseña ingresada coincide con un nombre dado, puede generar el valor hash de la misma manera y compararlo con el hash guardado. Como un hash (Object.hashCode ()) es un int, podrá almacenar los 20 hashes de contraseña en 80 bytes).

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *