Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Vb.Net Comprimere un array di bytes
Forum - C# / VB.NET - Vb.Net Comprimere un array di bytes

Avatar
klez91 (Normal User)
Pro


Messaggi: 117
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 20:13
Martedì, 03/03/2009
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

  1. Private Function GZipCompressBytes(ByVal Input() As Byte) As Byte()
  2.         Dim Stream As New IO.MemoryStream
  3.         Dim GZip As New IO.Compression.GZipStream(Stream, IO.Compression.CompressionMode.Compress)
  4.         GZip.Write(Input, 0, Input.Length)
  5.         Stream.Seek(0, IO.SeekOrigin.Begin)
  6.         Dim Output(Stream.Length - 1) As Byte
  7.         Stream.Read(Output, 0, Output.Length)
  8.         GZip.Close()
  9.         Stream.Close()
  10.         Return Output
  11.     End Function


Codice sorgente - presumibilmente VB.NET

  1. Private Function GZipDecompressBytes(ByVal Input() As Byte) As Byte()
  2.         Dim Stream As New IO.MemoryStream
  3.         Stream.Write(Input, 0, Input.Length)
  4.         Dim GZip As New IO.Compression.GZipStream(Stream, IO.Compression.CompressionMode.Decompress)
  5.         Stream.Seek(0, IO.SeekOrigin.Begin)
  6.         Dim Output(Stream.Length - 1) As Byte
  7.         GZip.Read(Output, 0, Output.Length)
  8.         GZip.Close()
  9.         Stream.Close()
  10.         Return Output
  11.     End Function


Spero di essere stato chiaro...grazie per un'eventuale aiuto:k:

Ultima modifica effettuata da klez91 il 05/03/2009 alle 17:29
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 21:38
Giovedì, 05/03/2009
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ù...

PM Quote
Avatar
klez91 (Normal User)
Pro


Messaggi: 117
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 14:20
Venerdì, 06/03/2009
Molto semplicemente giusto per fare una prova per vedere se il tutto funzionava ho utilizzato il codice sotto:
Codice sorgente - presumibilmente VB.NET

  1. Dim Input1() As Byte = {0, 1, 2, 3, 4, 5, 6}
  2.         Dim Output1() As Byte = GZipCompressBytes(Input1)
  3.  
  4.         Dim Bytes() As Byte = GZipDecompressBytes(Output1)
  5.         'istruzioni successive...


Fermando il programma a livello delle "istruzioni successive" noto che la variabile "Bytes()" è vuota cioè ogni suo elemento è uguale a zero.

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 16:43
Venerdì, 06/03/2009
Ma nella funzione di decompressione manca l'istruzione Write per decomprimere l'input.

PM Quote
Avatar
klez91 (Normal User)
Pro


Messaggi: 117
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 13:23
Sabato, 07/03/2009
Scusami non ho capito bene, potresti spiegarti meglio per piacere ?? :)

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 15:53
Sabato, 07/03/2009
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...

PM Quote
Avatar
klez91 (Normal User)
Pro


Messaggi: 117
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 16:37
Domenica, 08/03/2009
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 ?

PM Quote
Avatar
klez91 (Normal User)
Pro


Messaggi: 117
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 16:22
Sabato, 14/03/2009
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 ???

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:30
Domenica, 15/03/2009
Controlla il sorgente del mio programma Arkiviation. Lì uso un DeflateStream, il cui funzionamento è però analogo a quello del GZipStream.

PM Quote