Oppure

Loading
11/02/11 14:31
Phil93
    Public Function CompressByte(ByVal byteSource() As Byte) As Byte()
        Dim objMemStream As New MemoryStream()
        Dim objGZipStream As New GZipStream(objMemStream, CompressionMode.Compress, True)
        objGZipStream.Write(byteSource, 0, byteSource.Length)
        objGZipStream.Dispose()
        objMemStream.Position = 0
        Dim buffer(objMemStream.Length) As Byte
        objMemStream.Read(buffer, 0, buffer.Length)
        objMemStream.Dispose()
        Return buffer
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim B1() As Byte = File.ReadAllBytes(TextBox1.Text)
        Dim B2() As Byte = CompressByte(B1)

        Dim Len1, Len2 As Integer
        Len1 = B1.Length
        Len2 = B2.Length

    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.
aaa
12/02/11 2:56
TheKaneB
è 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.
aaa