Como se sugiere en the accepted answer, la compresión de datos no funciona para acortar las rutas de URL que ya son bastante cortas.
DotNetZip tiene una clase DeflateStream que expone un método estático (compartido en VB) CompressString. Es una forma de una línea para comprimir una cadena usando DEFLATE (RFC 1951). La implementación DEFLATE es totalmente compatible con System.IO.Compression.DeflateStream, pero DotNetZip se comprime mejor. He aquí cómo usted puede ser que lo utiliza:
string[] orig = {
"folder1/folder2/page1.aspx",
"folderBB/folderAA/page2.aspx",
};
public void Run()
{
foreach (string s in orig)
{
System.Console.WriteLine("original : {0}", s);
byte[] compressed = DeflateStream.CompressString(s);
System.Console.WriteLine("compressed : {0}", ByteArrayToHexString(compressed));
string uncompressed = DeflateStream.UncompressString(compressed);
System.Console.WriteLine("uncompressed: {0}\n", uncompressed);
}
}
El uso de ese código, aquí están mis resultados:
original : folder1/folder2/page1.aspx
compressed : 4bcbcf49492d32d44f03d346fa0589e9a9867a89c5051500
uncompressed: folder1/folder2/page1.aspx
original : folderBB/folderAA/page2.aspx
compressed : 4bcbcf49492d7272d24f03331c1df50b12d3538df4128b0b2a00
uncompressed: folderBB/folderAA/page2.aspx
Así se puede ver el conjunto de bytes "comprimido", cuando se representa en hexadecimal, es más largo que el original, aproximadamente 2 veces más largo. La razón es que un byte hexadecimal es realmente 2 caracteres ASCII.
Puede compensar un poco por eso utilizando base-62, en lugar de base-16 (hex) para representar el número. En ese caso, a-z y A-Z también son dígitos, que le dan 0-9 (10) + a-z (+26) + A-Z (+26) = 62 dígitos en total. Eso acortaría la producción significativamente. No he intentado eso. todavía.
EDITAR
Ok Probé el codificador Base-62. Acorta la cuerda hexagonal a la mitad. Pensé que lo reduciría al 25% (62/16 = ~ 4) Pero creo que estoy perdiendo algo con la discretización. En mis pruebas, la cadena codificada en base 62 resultante tiene aproximadamente la misma longitud que la URL original. Entonces, no, usar la compresión y luego la codificación de la base-62 todavía no es un buen enfoque. realmente quieres un valor hash
¿Por qué? Probablemente haya una mejor manera de hacer lo que estás preguntando. –
"Por qué" es ciertamente una buena respuesta. Sin embargo, como nota al margen, la codificación Huffman funciona muy bien para la compresión de texto simple sin tener que recurrir a bibliotecas externas y la compresión LZW. –
posible duplicado de [Mejor algoritmo de compresión para cadenas de texto cortas] (http://stackoverflow.com/questions/1138345/best-compression-algorithm-for-short-text-strings) –