vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Re: Binärdaten als String komprimieren 
Autor: Kuno60
Datum: 07.04.22 19:27

Hi Dilbert,

du hast noch nicht verstanden, dass ein String keine Bytefolge ist.

Ich fasse noch mal zusammen:

Eine Zeichenfolge (String) ist eine Folge von 16-Bit-Unicode-Zeichen (Char).
Die DeflateStream-Klasse kann aber nur eine Bytefolge verarbeiten.
Deshalb kann eine Zeichenfolge nicht direkt komprimiert werden und muss erst in ein Byte-Array umgewandelt werden. Das beste Ergebnis erhält man mit UTF-8, da da fast alle Zeichen in einzelne Bytes umgewandelt werden. Sonderzeichen belegen mehrere Bytes.
Werden nun diese Bytes komprimiert, so erhält man ein kleineres Byte-Array.
Dieses komprimierte Byte-Array kann dann dekomprimiert werden und wieder in eine Zeichenfolge umgewandelt werden.

Das originale Byte-Array stimmt exakt mit dem dekomprimierten Byte-Array überein!
Doch nach der Umwandlung in eine Zeichenfolge, werden nicht alle Zeichen exakt wiederhergestellt. Den Grund dafür hat "eierlein" bereits genannt. Das dürfte aber kein Problem sein, da in deinem externen Modul die Zeichen sicher nicht mit ChrW() erzeugt werden.

In deinem Beispiel wandelst du die komprimierten Bytes wieder in einen String um. Das geht zwar, macht aber nicht viel Sinn, da dabei nur wirres Zeug raus kommt (wegen binärer Daten).

Hier mein Test mit Bytes:

Imports System.IO
Imports System.IO.Compression
Imports System.Text
 
Module Module2
 
  Sub MeinTest()
    Dim sb As New StringBuilder
    For x = -32768 To 65535
      sb.Append(ChrW(x))
    Next
    Dim Eingabe As String = sb.ToString
 
    Dim OrigBytes As Byte() = Encoding.UTF8.GetBytes(Eingabe)
    Dim ComprBytes As Byte() = Compress(OrigBytes)
    Dim DecomprBytes As Byte() = Decompress(ComprBytes)
    Dim Ausgabe As String = Encoding.UTF8.GetString(DecomprBytes)
 
    Console.WriteLine("Länge Eingabe: {0}", Eingabe.Length)
    Console.WriteLine("Länge Ausgabe: {0}", Ausgabe.Length)
    Console.WriteLine()
    Console.WriteLine("Länge original Bytes: {0}", OrigBytes.Length)
    Console.WriteLine("Länge komprimierte Bytes: {0}", ComprBytes.Length)
    Console.WriteLine("Länge dekomprimierte Bytes: {0}", DecomprBytes.Length)
    Console.WriteLine()
    Console.WriteLine("Gleiche Bytes: {0}", OrigBytes.SequenceEqual( _
      DecomprBytes))
    Console.WriteLine("Gleicher Text: {0}", Eingabe = Ausgabe)
  End Sub
 
  Function Compress(ba As Byte()) As Byte()
    Using input As New MemoryStream(ba)
      Using output As New MemoryStream()
        Using gzip As New DeflateStream(output, CompressionMode.Compress)
          input.CopyTo(gzip)
        End Using
        Return output.ToArray
      End Using
    End Using
  End Function
 
  Function Decompress(ba As Byte()) As Byte()
    Using input As New MemoryStream(ba)
      Using output As New MemoryStream()
        Using gzip As New DeflateStream(input, CompressionMode.Decompress)
          gzip.CopyTo(output)
          Return output.ToArray
        End Using
      End Using
    End Using
  End Function
 
End Module
Ausgegebener Text:

Länge Eingabe: 98304
Länge Ausgabe: 98304

Länge original Bytes: 292732
Länge komprimierte Bytes: 185853
Länge dekomprimierte Bytes: 292732

Gleiche Bytes: True
Gleicher Text: False
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Binärdaten als String komprimieren1.326Dilbert04.04.22 13:17
Re: Binärdaten als String komprimieren741eierlein04.04.22 14:32
Re: Binärdaten als String komprimieren652Dilbert04.04.22 14:33
Re: Binärdaten als String komprimieren743Kuno6004.04.22 21:06
Re: Binärdaten als String komprimieren660Dilbert05.04.22 09:31
Re: Binärdaten als String komprimieren718Kuno6005.04.22 18:11
Re: Binärdaten als String komprimieren619Dilbert05.04.22 18:51
Re: Binärdaten als String komprimieren726eierlein05.04.22 19:22
Re: Binärdaten als String komprimieren615Dilbert05.04.22 19:51
Re: Binärdaten als String komprimieren692Manfred X06.04.22 16:28
Re: Binärdaten als String komprimieren699Manfred X07.04.22 01:08
Re: Binärdaten als String komprimieren618Dilbert06.04.22 18:37
Re: Binärdaten als String komprimieren612Dilbert07.04.22 09:47
Re: Binärdaten als String komprimieren713Manfred X07.04.22 13:09
Re: Binärdaten als String komprimieren604Dilbert07.04.22 17:15
Re: Binärdaten als String komprimieren682Kuno6007.04.22 19:27
Re: Binärdaten als String komprimieren610Dilbert07.04.22 20:05
Re: Binärdaten als String komprimieren600Kuno6013.04.22 11:43
Re: Binärdaten als String komprimieren597Dilbert10.04.22 11:35
Re: Binärdaten als String komprimieren667Manfred X10.04.22 15:25
Re: Binärdaten als String komprimieren638eierlein10.04.22 17:32
Re: Binärdaten als String komprimieren577Dilbert10.04.22 18:40
Re: Binärdaten als String komprimieren633eierlein10.04.22 19:07
Re: Binärdaten als String komprimieren586Dilbert10.04.22 21:28
Re: Binärdaten als String komprimieren654Manfred X11.04.22 16:27
Re: Binärdaten als String komprimieren569Dilbert11.04.22 20:35
Vorschlag für Umwandlung der Zeichenfolgen in Bytefolgen619Manfred X11.04.22 22:04
Re: Binärdaten als String komprimieren566Dilbert11.04.22 23:03
Re: Binärdaten als String komprimieren618Manfred X11.04.22 23:59
Re: Binärdaten als String komprimieren584Dilbert11.04.22 23:19
Re: Binärdaten als String komprimieren624Manfred X12.04.22 01:12
Re: Binärdaten als String komprimieren584Dilbert12.04.22 11:11
Re: Binärdaten als String komprimieren608Manfred X12.04.22 13:54
Re: Binärdaten als String komprimieren566Dilbert12.04.22 15:00
Re: Binärdaten als String komprimieren610Manfred X12.04.22 15:54
Re: Binärdaten als String komprimieren602Manfred X12.04.22 16:43
Re: Binärdaten als String komprimieren569Dilbert12.04.22 17:59
Re: Binärdaten als String komprimieren596Manfred X12.04.22 19:30
Re: Binärdaten als String komprimieren567Dilbert12.04.22 20:48
Re: Binärdaten als String komprimieren602Manfred X12.04.22 21:38
Re: Binärdaten als String komprimieren575Dilbert12.04.22 22:33
Re: Binärdaten als String komprimieren568Dilbert13.04.22 12:52
Re: Binärdaten als String komprimieren589Manfred X13.04.22 17:05
Re: Binärdaten als String komprimieren587Kuno6014.04.22 12:34
Re: Binärdaten als String komprimieren563Dilbert14.04.22 18:16
Re: Binärdaten als String komprimieren594Manfred X14.04.22 21:22
Marshal String zu Bytearray598Manfred X14.04.22 23:59
Re: Binärdaten als String komprimieren576Manfred X14.04.22 19:05
Re: Binärdaten als String komprimieren548Dilbert15.04.22 20:48
Marshal Bytearray zu String568Manfred X15.04.22 21:26
Re: Binärdaten als String komprimieren555Dilbert17.04.22 22:45
Re: Binärdaten als String komprimieren567Manfred X18.04.22 00:15
Re: Binärdaten als String komprimieren575Dilbert18.04.22 01:49

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel