Oppure

Loading
03/03/09 19:13
klez91
Ciao a tutti...mi servirebbe comprimere un array di bytes e salvare il risultato in un'altro array. Questo ovviamente nn è possibile farlo a primo impatto cn il DeflateStream o il GzipStream perchè essi lavorano solo sugli stream, mentre a me mi servirebbe salvare il contenuto in un array. Ho abbozzato un po di codice per la compressione funziona però quando vado a decomprimere l'array di output è uguale a 0...
Private Function GZipCompressBytes(ByVal Input() As Byte) As Byte()
        Dim Stream As New IO.MemoryStream
        Dim GZip As New IO.Compression.GZipStream(Stream, IO.Compression.CompressionMode.Compress)
        GZip.Write(Input, 0, Input.Length)
        Stream.Seek(0, IO.SeekOrigin.Begin)
        Dim Output(Stream.Length - 1) As Byte
        Stream.Read(Output, 0, Output.Length)
        GZip.Close()
        Stream.Close()
        Return Output
    End Function

Private Function GZipDecompressBytes(ByVal Input() As Byte) As Byte()
        Dim Stream As New IO.MemoryStream
        Stream.Write(Input, 0, Input.Length)
        Dim GZip As New IO.Compression.GZipStream(Stream, IO.Compression.CompressionMode.Decompress)
        Stream.Seek(0, IO.SeekOrigin.Begin)
        Dim Output(Stream.Length - 1) As Byte
        GZip.Read(Output, 0, Output.Length)
        GZip.Close()
        Stream.Close()
        Return Output
    End Function

Spero di essere stato chiaro...grazie per un'eventuale aiuto:k:
Ultima modifica effettuata da klez91 05/03/09 16:29
aaa
05/03/09 20:38
Il Totem
Il codice sembra giusto, ma essendo staccato dal contesto in cui viene usato, non fornisce tutte le informazioni necessarie: se posti anche il codice che hai usato, richiamando queste funzioni, potrei fare qualcosa in più...
aaa
06/03/09 13:20
klez91
Molto semplicemente giusto per fare una prova per vedere se il tutto funzionava ho utilizzato il codice sotto:
        Dim Input1() As Byte = {0, 1, 2, 3, 4, 5, 6}
        Dim Output1() As Byte = GZipCompressBytes(Input1)

        Dim Bytes() As Byte = GZipDecompressBytes(Output1)
        'istruzioni successive...

Fermando il programma a livello delle "istruzioni successive" noto che la variabile "Bytes()" è vuota cioè ogni suo elemento è uguale a zero.
aaa
06/03/09 15:43
Il Totem
Ma nella funzione di decompressione manca l'istruzione Write per decomprimere l'input.
aaa
07/03/09 12:23
klez91
Scusami non ho capito bene, potresti spiegarti meglio per piacere ?? :)
aaa
07/03/09 14:53
Il Totem
Penso che anche nella decompressione si debba richiamare il metodo Write come hai fatto nella compressione, perchè, di fatto, quel codice apre solamente uno gzip stream decompresso. Anche se non conosco l'esatto funzionamento del costruttore, suppongo, per analogia, che quello gzip stream debba scrivere, e quindi trasferire i dati decompressi da qualche parte...
aaa
08/03/09 15:37
klez91
Si ho provato ma quando il GzipStream è in modalità di decompressione non mi fa scrivere niente sul memorystream anzi mi genera l'errore "Scrittura nel flusso di compressione non supportata.", evidenziando la riga dove appunto era scritto "GZip.Write(...". Da cosa può dipendere ?
aaa
14/03/09 15:22
klez91
Non avendo ricevuto risposte da un po di giorni, capisco che da come ho impostato le funzioni probabilemnte è difficile comprimere e decomprimere bytes. Allora mi chiedevo, nn esiste nessun altro metodo alternativo per raggiungere sempre lo stesso risultato ???
aaa