klez91 (Normal User)
Pro
Messaggi: 117
Iscritto: 04/05/2008
|
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...
Codice sorgente - presumibilmente VB.NET |
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
|
Codice sorgente - presumibilmente VB.NET |
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 Ultima modifica effettuata da klez91 il 05/03/2009 alle 17:29 |
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
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ù...
|
|
klez91 (Normal User)
Pro
Messaggi: 117
Iscritto: 04/05/2008
|
Molto semplicemente giusto per fare una prova per vedere se il tutto funzionava ho utilizzato il codice sotto:
Codice sorgente - presumibilmente VB.NET |
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.
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Ma nella funzione di decompressione manca l'istruzione Write per decomprimere l'input.
|
|
klez91 (Normal User)
Pro
Messaggi: 117
Iscritto: 04/05/2008
|
Scusami non ho capito bene, potresti spiegarti meglio per piacere ??
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
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...
|
|
klez91 (Normal User)
Pro
Messaggi: 117
Iscritto: 04/05/2008
|
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 ?
|
|
klez91 (Normal User)
Pro
Messaggi: 117
Iscritto: 04/05/2008
|
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 ???
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Controlla il sorgente del mio programma Arkiviation. Lì uso un DeflateStream, il cui funzionamento è però analogo a quello del GZipStream.
|
|