vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 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.258Dilbert04.04.22 13:17
Re: Binärdaten als String komprimieren688eierlein04.04.22 14:32
Re: Binärdaten als String komprimieren597Dilbert04.04.22 14:33
Re: Binärdaten als String komprimieren687Kuno6004.04.22 21:06
Re: Binärdaten als String komprimieren605Dilbert05.04.22 09:31
Re: Binärdaten als String komprimieren662Kuno6005.04.22 18:11
Re: Binärdaten als String komprimieren565Dilbert05.04.22 18:51
Re: Binärdaten als String komprimieren671eierlein05.04.22 19:22
Re: Binärdaten als String komprimieren557Dilbert05.04.22 19:51
Re: Binärdaten als String komprimieren638Manfred X06.04.22 16:28
Re: Binärdaten als String komprimieren642Manfred X07.04.22 01:08
Re: Binärdaten als String komprimieren564Dilbert06.04.22 18:37
Re: Binärdaten als String komprimieren558Dilbert07.04.22 09:47
Re: Binärdaten als String komprimieren658Manfred X07.04.22 13:09
Re: Binärdaten als String komprimieren550Dilbert07.04.22 17:15
Re: Binärdaten als String komprimieren627Kuno6007.04.22 19:27
Re: Binärdaten als String komprimieren557Dilbert07.04.22 20:05
Re: Binärdaten als String komprimieren544Kuno6013.04.22 11:43
Re: Binärdaten als String komprimieren541Dilbert10.04.22 11:35
Re: Binärdaten als String komprimieren611Manfred X10.04.22 15:25
Re: Binärdaten als String komprimieren584eierlein10.04.22 17:32
Re: Binärdaten als String komprimieren520Dilbert10.04.22 18:40
Re: Binärdaten als String komprimieren577eierlein10.04.22 19:07
Re: Binärdaten als String komprimieren533Dilbert10.04.22 21:28
Re: Binärdaten als String komprimieren598Manfred X11.04.22 16:27
Re: Binärdaten als String komprimieren514Dilbert11.04.22 20:35
Vorschlag für Umwandlung der Zeichenfolgen in Bytefolgen563Manfred X11.04.22 22:04
Re: Binärdaten als String komprimieren514Dilbert11.04.22 23:03
Re: Binärdaten als String komprimieren563Manfred X11.04.22 23:59
Re: Binärdaten als String komprimieren530Dilbert11.04.22 23:19
Re: Binärdaten als String komprimieren570Manfred X12.04.22 01:12
Re: Binärdaten als String komprimieren530Dilbert12.04.22 11:11
Re: Binärdaten als String komprimieren552Manfred X12.04.22 13:54
Re: Binärdaten als String komprimieren511Dilbert12.04.22 15:00
Re: Binärdaten als String komprimieren553Manfred X12.04.22 15:54
Re: Binärdaten als String komprimieren547Manfred X12.04.22 16:43
Re: Binärdaten als String komprimieren514Dilbert12.04.22 17:59
Re: Binärdaten als String komprimieren541Manfred X12.04.22 19:30
Re: Binärdaten als String komprimieren512Dilbert12.04.22 20:48
Re: Binärdaten als String komprimieren547Manfred X12.04.22 21:38
Re: Binärdaten als String komprimieren520Dilbert12.04.22 22:33
Re: Binärdaten als String komprimieren516Dilbert13.04.22 12:52
Re: Binärdaten als String komprimieren533Manfred X13.04.22 17:05
Re: Binärdaten als String komprimieren529Kuno6014.04.22 12:34
Re: Binärdaten als String komprimieren507Dilbert14.04.22 18:16
Re: Binärdaten als String komprimieren538Manfred X14.04.22 21:22
Marshal String zu Bytearray542Manfred X14.04.22 23:59
Re: Binärdaten als String komprimieren519Manfred X14.04.22 19:05
Re: Binärdaten als String komprimieren492Dilbert15.04.22 20:48
Marshal Bytearray zu String513Manfred X15.04.22 21:26
Re: Binärdaten als String komprimieren500Dilbert17.04.22 22:45
Re: Binärdaten als String komprimieren512Manfred X18.04.22 00:15
Re: Binärdaten als String komprimieren521Dilbert18.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