Wie vorgeschlagen in die akzeptierte Antwort Die Datenkomprimierung funktioniert nicht, um URL-Pfade zu verkürzen, die bereits recht kurz sind.
DotNetZip hat eine DeflateStream-Klasse, die eine statische (Shared in VB) CompressString Methode. Es handelt sich um eine einzeilige Methode zur Komprimierung einer Zeichenkette mit DEFLATE ( RFC 1951 ). Die DEFLATE-Implementierung ist vollständig kompatibel mit System.IO.Compression.DeflateStream , aber DotNetZip komprimiert besser. Hier ist, wie Sie es verwenden können:
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);
}
}
Mit diesem Code habe ich die folgenden Testergebnisse erzielt:
original : folder1/folder2/page1.aspx
compressed : 4bcbcf49492d32d44f03d346fa0589e9a9867a89c5051500
uncompressed: folder1/folder2/page1.aspx
original : folderBB/folderAA/page2.aspx
compressed : 4bcbcf49492d7272d24f03331c1df50b12d3538df4128b0b2a00
uncompressed: folderBB/folderAA/page2.aspx
Sie sehen also, dass das "komprimierte" Byte-Array, wenn es in Hex dargestellt wird, länger ist als das Original, etwa doppelt so lang. Der Grund dafür ist, dass ein Hex-Byte eigentlich 2 ASCII-Zeichen sind.
Sie könnten dies etwas ausgleichen, indem Sie die Zahl zur Basis-62 anstatt zur Basis-16 (Hex) darstellen. In diesem Fall sind a-z und A-Z auch Ziffern, so dass Sie 0-9 (10) + a-z (+26) + A-Z (+26) = 62 Ziffern insgesamt erhalten. Das würde die Ausgabe erheblich verkürzen. Ich habe das noch nicht ausprobiert.
EDIT
Ok, ich habe den Base-62-Encoder getestet. Er verkürzt die Hex-Zeichenkette um etwa die Hälfte. Ich dachte, er würde sie auf 25% kürzen (62/16 =~ 4), aber ich glaube, ich verliere etwas durch die Diskretisierung. In meinen Tests ist die resultierende Base-62-kodierte Zeichenfolge ungefähr genauso lang wie die ursprüngliche URL. Also, nein, mit Kompression und dann Base-62-Codierung ist immer noch kein guter Ansatz. Sie wollen wirklich einen Hash-Wert.