Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Compressione array di Byte
Forum - C# / VB.NET - Compressione array di Byte

Avatar
Phil93 (Normal User)
Pro


Messaggi: 85
Iscritto: 26/01/2011

Segnala al moderatore
Postato alle 15:31
Venerdì, 11/02/2011
Codice sorgente - presumibilmente VB.NET

  1. Public Function CompressByte(ByVal byteSource() As Byte) As Byte()
  2.         Dim objMemStream As New MemoryStream()
  3.         Dim objGZipStream As New GZipStream(objMemStream, CompressionMode.Compress, True)
  4.         objGZipStream.Write(byteSource, 0, byteSource.Length)
  5.         objGZipStream.Dispose()
  6.         objMemStream.Position = 0
  7.         Dim buffer(objMemStream.Length) As Byte
  8.         objMemStream.Read(buffer, 0, buffer.Length)
  9.         objMemStream.Dispose()
  10.         Return buffer
  11.     End Function
  12.  
  13.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  14.         Dim B1() As Byte = File.ReadAllBytes(TextBox1.Text)
  15.         Dim B2() As Byte = CompressByte(B1)
  16.  
  17.         Dim Len1, Len2 As Integer
  18.         Len1 = B1.Length
  19.         Len2 = B2.Length
  20.  
  21.     End Sub



Ho un problema con questa funzione per comprimere array di Byte.
Il problema è che con alcuni file effettivamente Len2 è minore di Len1, e va bene, ma con altri Len2 è addirittura maggiore di Len1. Che errori ho fatto? In alternativa, avete altre funzioni da indicarmi?
Grazie.

PM
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1787
Iscritto: 26/06/2009

Up
0
Down
V
Segnala al moderatore
Postato alle 3:56
Sabato, 12/02/2011
è assolutamente normale e dipende dall'entropia del buffer da comprimere.

Un buffer con bit tutti uguali avrà il massimo della compressione. Una sequenza random, con distribuzione omogenea, di bit avrà entropia massima e sarà impossibile da comprimere.

ZIP, infatti, prima fa una stima dell'entropia di un blocchetto di dati, se questa è troppo alta lo ricopia uguale, se è abbastanza bassa applica la compressione Deflate.

Avevo questo sospetto, ma non ero sicuro. Grazie del chiarimento. - Phil93 - 13/02/11 15:09


Software Failure: Guru Meditation
Forum su Informatica, Elettronica, Robotica e Tecnologia: http://www.nonsoloamiga.com
PM