vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
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.573Dilbert04.04.22 13:17
Re: Binärdaten als String komprimieren888eierlein04.04.22 14:32
Re: Binärdaten als String komprimieren800Dilbert04.04.22 14:33
Re: Binärdaten als String komprimieren888Kuno6004.04.22 21:06
Re: Binärdaten als String komprimieren804Dilbert05.04.22 09:31
Re: Binärdaten als String komprimieren860Kuno6005.04.22 18:11
Re: Binärdaten als String komprimieren757Dilbert05.04.22 18:51
Re: Binärdaten als String komprimieren871eierlein05.04.22 19:22
Re: Binärdaten als String komprimieren758Dilbert05.04.22 19:51
Re: Binärdaten als String komprimieren835Manfred X06.04.22 16:28
Re: Binärdaten als String komprimieren837Manfred X07.04.22 01:08
Re: Binärdaten als String komprimieren757Dilbert06.04.22 18:37
Re: Binärdaten als String komprimieren756Dilbert07.04.22 09:47
Re: Binärdaten als String komprimieren874Manfred X07.04.22 13:09
Re: Binärdaten als String komprimieren748Dilbert07.04.22 17:15
Re: Binärdaten als String komprimieren825Kuno6007.04.22 19:27
Re: Binärdaten als String komprimieren753Dilbert07.04.22 20:05
Re: Binärdaten als String komprimieren744Kuno6013.04.22 11:43
Re: Binärdaten als String komprimieren736Dilbert10.04.22 11:35
Re: Binärdaten als String komprimieren808Manfred X10.04.22 15:25
Re: Binärdaten als String komprimieren780eierlein10.04.22 17:32
Re: Binärdaten als String komprimieren721Dilbert10.04.22 18:40
Re: Binärdaten als String komprimieren772eierlein10.04.22 19:07
Re: Binärdaten als String komprimieren731Dilbert10.04.22 21:28
Re: Binärdaten als String komprimieren792Manfred X11.04.22 16:27
Re: Binärdaten als String komprimieren711Dilbert11.04.22 20:35
Vorschlag für Umwandlung der Zeichenfolgen in Bytefolgen759Manfred X11.04.22 22:04
Re: Binärdaten als String komprimieren704Dilbert11.04.22 23:03
Re: Binärdaten als String komprimieren758Manfred X11.04.22 23:59
Re: Binärdaten als String komprimieren721Dilbert11.04.22 23:19
Re: Binärdaten als String komprimieren769Manfred X12.04.22 01:12
Re: Binärdaten als String komprimieren723Dilbert12.04.22 11:11
Re: Binärdaten als String komprimieren750Manfred X12.04.22 13:54
Re: Binärdaten als String komprimieren707Dilbert12.04.22 15:00
Re: Binärdaten als String komprimieren748Manfred X12.04.22 15:54
Re: Binärdaten als String komprimieren740Manfred X12.04.22 16:43
Re: Binärdaten als String komprimieren715Dilbert12.04.22 17:59
Re: Binärdaten als String komprimieren741Manfred X12.04.22 19:30
Re: Binärdaten als String komprimieren703Dilbert12.04.22 20:48
Re: Binärdaten als String komprimieren743Manfred X12.04.22 21:38
Re: Binärdaten als String komprimieren718Dilbert12.04.22 22:33
Re: Binärdaten als String komprimieren711Dilbert13.04.22 12:52
Re: Binärdaten als String komprimieren726Manfred X13.04.22 17:05
Re: Binärdaten als String komprimieren733Kuno6014.04.22 12:34
Re: Binärdaten als String komprimieren705Dilbert14.04.22 18:16
Re: Binärdaten als String komprimieren739Manfred X14.04.22 21:22
Marshal String zu Bytearray739Manfred X14.04.22 23:59
Re: Binärdaten als String komprimieren716Manfred X14.04.22 19:05
Re: Binärdaten als String komprimieren689Dilbert15.04.22 20:48
Marshal Bytearray zu String716Manfred X15.04.22 21:26
Re: Binärdaten als String komprimieren697Dilbert17.04.22 22:45
Re: Binärdaten als String komprimieren711Manfred X18.04.22 00:15
Re: Binärdaten als String komprimieren719Dilbert18.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-2025 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