Hallo,
da ich desöfteren gefragt wurde, wie die GZip-Komprimierung geht..hier mein SourceCode für jeden einsehbar:
Komprimierung.vb
Die Hauptfunktion ( cl_Save ) habe ich schon Kommentiert...falls jemand eine detailiertere Erklärung haben möchte, soll er dies bitte sagen.
Zu den anderen Funktionen:
Bewirkt, dass zu erst der Text "Test" in ein ByteArray konvertiert wird und dann mit der Funktion Compress()
Komprimiert wird.
Die zwei Console.WriteLine-Zeilen bewirken nur, dass der Text auch angezeigt wird.
Beispielprojekt und kompilierte DLL sind unter folgenden Links zufinden:
animated-coding.tk/Media/Defau…oads/GZip-Compression.zip
Lizenz: CC by SA
Artikel auf Animated-Coding:
animated-coding.tk/source-code/gzip/
AliveDevil
da ich desöfteren gefragt wurde, wie die GZip-Komprimierung geht..hier mein SourceCode für jeden einsehbar:
VB.NET-Quellcode
- ' Importieren der benötigten Namespaces
- Imports System.IO
- Imports System.Security.Cryptography
- Imports System.Text
- Imports System
- Imports System.IO.Compression
- Public Class cl_Save ' Klasse cl_Save
- Public Shared Function Compress(ByVal value() As Byte) As String ' Komprimieren eines ByteArrays in einen String
- Dim buffer() As Byte = value ' Buffer von "value" erstellen
- Dim memoryStream = New MemoryStream() ' Einen neuen MemoryStream erstellen
- Using gZipStream = New GZipStream(memoryStream, CompressionMode.Compress, True) ' Komprimieren
- gZipStream.Write(buffer, 0, buffer.Length) ' schreibe in buffer
- End Using
- memoryStream.Position = 0 ' Setze Position auf Null
- Dim compressedData = New Byte(memoryStream.Length - 1) {} ' Deklariere komprimiere Daten als neues Byte Array mit der Länge von memoryStream
- memoryStream.Read(compressedData, 0, compressedData.Length) ' Lese compressedData
- Dim gZipBuffer = New Byte(compressedData.Length + 4 - 1) {} ' Neuen gZipBuffer erstellen
- System.Buffer.BlockCopy(compressedData, 0, gZipBuffer, 4, compressedData.Length) ' Kopiere
- System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gZipBuffer, 0, 4) ' Kopiere
- Return Convert.ToBase64String(gZipBuffer) ' Konvertiere nach Base64
- End Function
- Public Shared Function DecompressString(ByVal compressedText As String) As Byte() ' Dekomprimieren eines String in ein ByteArray
- Dim gZipBuffer() As Byte = Convert.FromBase64String(compressedText) ' Dekodiere den Base64 String
- Using memoryStream = New MemoryStream() ' Neuen memorystream erstellen
- Dim dataLength As Integer = BitConverter.ToInt32(gZipBuffer, 0) ' Konvertiere die Bits
- memoryStream.Write(gZipBuffer, 4, gZipBuffer.Length - 4) ' Schreibe in den Buffer
- Dim buffer = New Byte(dataLength - 1) {} ' Deklariere neuen Buffer
- memoryStream.Position = 0 ' Setze Position auf Null
- Using gZipStream = New GZipStream(memoryStream, CompressionMode.Decompress) ' gZipStream erstellen
- gZipStream.Read(buffer, 0, buffer.Length) ' lese alles aus memoryStream und schreibe es in buffer
- End Using
- Return buffer ' gebe buffer zurück
- End Using
- End Function
- End Class
- Module compression_call
- Public Sub Main()
- Dim tmp_compressed As String = cl_Save.Compress(TextStringToByteArray("Test"))
- Dim tmp_decompressed As String = ByteArrayToTextString(cl_Save.DecompressString(tmp_compressed))
- Console.WriteLine("Compressed String in Base64 of ""{0}"": {1}", "Test", tmp_compressed)
- Console.ReadLine()
- Console.WriteLine("Decompressed String of ""{0}"": {1}", tmp_compressed, tmp_decompressed)
- Console.ReadLine()
- End Sub
- Public Function TextStringToByteArray(ByRef str As String) As Byte()
- Dim enc As System.Text.Encoding = System.Text.Encoding.Default
- Return enc.GetBytes(str)
- End Function
- Public Function ByteArrayToTextString(ByRef Barr() As Byte) As String
- Dim enc As System.Text.Encoding = System.Text.Encoding.Default
- Return enc.GetString(Barr)
- End Function
- End Module
Die Hauptfunktion ( cl_Save ) habe ich schon Kommentiert...falls jemand eine detailiertere Erklärung haben möchte, soll er dies bitte sagen.
Zu den anderen Funktionen:
Bewirkt, dass zu erst der Text "Test" in ein ByteArray konvertiert wird und dann mit der Funktion Compress()
Komprimiert wird.
Die zwei Console.WriteLine-Zeilen bewirken nur, dass der Text auch angezeigt wird.
Beispielprojekt und kompilierte DLL sind unter folgenden Links zufinden:
animated-coding.tk/Media/Defau…oads/GZip-Compression.zip
Lizenz: CC by SA
Artikel auf Animated-Coding:
animated-coding.tk/source-code/gzip/
AliveDevil
Dieser Beitrag wurde bereits 10 mal editiert, zuletzt von „AliveDevil“ ()