Hallo, ich wieder,
ich stehe ein wenig auf dem Schlauch. Folgende Methode dekomprimiert einen Base64 encodeten String:
Diese Dekomprimierfunktion lag mir vor, ich brauche das Gegenstück dazu, also wie man den dekomprimierten String wieder komprimiert.
Ich weiß nicht warum diese Funktion so hässlich ist mit den fixen Werten darin. Das ist wie gesagt nicht meine Funktion, so ist sie aber in einem Spiel drin und ich muss eine Komprimierfunktion haben, die genau darauf abgestimmt ist.
Ich habe folgendes entworfen:
Nun kann ich leider nicht nachvollziehen warum das ganze nicht funktioniert. Mit folgendem Beispiel habe ich das ganze ausprobiert:
Ich hoffe mir kann jemand den Abend retten, weil ich offensichtlich gerade zu blöd dafür bin.
PS: Folgende Ausgabe kommt:
Danke im Voraus
ich stehe ein wenig auf dem Schlauch. Folgende Methode dekomprimiert einen Base64 encodeten String:
C#-Quellcode
- public string UnZipFromBase64(string Compressedvalue)
- {
- byte[] buffer = Convert.FromBase64String(Compressedvalue);
- MemoryStream memoryStream = new MemoryStream(buffer);
- Stream stream = memoryStream;
- if (stream == null)
- {
- throw new ArgumentException();
- }
- if (!stream.CanRead)
- {
- throw new ArgumentException();
- }
- MemoryStream memoryStream2 = new MemoryStream();
- using (GZipStream gzipStream = new GZipStream(stream, CompressionMode.Decompress))
- {
- byte[] buffer2 = new byte[31457280];
- int num;
- do
- {
- num = gzipStream.Read(buffer2, 0, 31457280);
- }
- while (num == 31457280);
- memoryStream2.Write(buffer2, 0, num);
- }
- byte[] bytes = memoryStream2.ToArray();
- memoryStream.Close();
- memoryStream.Dispose();
- stream.Close();
- stream.Dispose();
- memoryStream2.Close();
- memoryStream2.Dispose();
- return Encoding.UTF8.GetString(bytes);
- }
Diese Dekomprimierfunktion lag mir vor, ich brauche das Gegenstück dazu, also wie man den dekomprimierten String wieder komprimiert.
Ich weiß nicht warum diese Funktion so hässlich ist mit den fixen Werten darin. Das ist wie gesagt nicht meine Funktion, so ist sie aber in einem Spiel drin und ich muss eine Komprimierfunktion haben, die genau darauf abgestimmt ist.
Ich habe folgendes entworfen:
C#-Quellcode
- public static string ZipToBase64(string UncompressedValue)
- {
- byte[] buffer = Encoding.UTF8.GetBytes(UncompressedValue);
- string result = string.Empty;
- using (var memoryStream = new MemoryStream())
- using (var zipStream = new GZipStream(memoryStream, CompressionMode.Compress))
- {
- zipStream.Write(buffer, 0, buffer.Length);
- result = Convert.ToBase64String(memoryStream.ToArray());
- }
- return result;
- }
Nun kann ich leider nicht nachvollziehen warum das ganze nicht funktioniert. Mit folgendem Beispiel habe ich das ganze ausprobiert:
C#-Quellcode
- string test = "hallo welt";
- Console.WriteLine("hallo welt plain => {0}", test);
- string b64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(test));
- Console.WriteLine("hallo welt base64 => {0}", b64);
- string b64compressed = ZipToBase64(b64);
- Console.WriteLine("hallo welt b64compressed => {0}", b64compressed);
- b64 = UnZipFromBase64(b64compressed);
- Console.WriteLine("hallo welt base64 => {0}", b64);
- test = Encoding.UTF8.GetString(Convert.FromBase64String(b64));
- Console.WriteLine("hallo welt plain: {0}", test);
- Console.ReadLine();
Ich hoffe mir kann jemand den Abend retten, weil ich offensichtlich gerade zu blöd dafür bin.
PS: Folgende Ausgabe kommt:
Danke im Voraus