[Catégorie modifiée VB6 ->.Net] Décompresser les données d'un tableau de byte

cs_brau Messages postés 19 Date d'inscription mardi 14 octobre 2008 Statut Membre Dernière intervention 15 décembre 2014 - 11 mars 2013 à 14:21
 Utilisateur anonyme - 11 mars 2013 à 22:14
Bonjour tout le monde,
ça fait maintenant 1 jour et demi que je sèche sur la décompression de données zip.
J'ai fait un script python pour effectuer cette décompression, qui utilise zlib et ça fonctionne correctement.
Seulement aujourd'hui je dois intégrer ce code de décompression dans une appli vb... je n'ai pas d'autre choix, c'est imposé.

Du coup je viens demander un peu d'aide, si cela est possible, et sachez qu'avant de poster, j'ai parcouru moults sites, forums, docs, exemple, dans toutes les langues ^^ mais je ne m'y connais pas assez en vb pour m'en sortir.

En gros, j'ai un flux de données sous forme de tableau de byte, que j'ai récupéré dans une section d'un fichier XML qui contient des paramètres mais qui sont compressés.
J'ai passé les étapes pour ne récupérer que les data compressées, après avoir fait un encode ascii et un decode base 64, et j'arrive au même résultat qu'en python, script dans lequel ces data sont bien décompressées.

Mais sous VB, je n'y arrive pas, j'ai l'erreur -3 avec zlib et le message suivant avec ReadByte (ReadByte est la méthode pour lire les octets décompressés par l'interface System.IO.Compression.DeflateStream de .Net)
An unhandled exception of type 'System.IO.InvalidDataException' occurred in System.dll
Additional information: Block length does not match with its complement.


Voici 3 essais de bout de code qui génèrent tous des erreurs... (CompressBuf est le tableau de byte compressé)

        Using ms1 As New MemoryStream(CompressBuf)
            Using dStream1 As System.IO.Compression.DeflateStream = New System.IO.Compression.DeflateStream(ms1, Compression.CompressionMode.Decompress)
                While dStream1.ReadByte <> -1  ' -1 indicates nothing left to read
                    decompressedBufferLength += 1
                End While
            End Using
        End Using
        Using ms2 As New MemoryStream(CompressBuf)
            Using dStream2 As System.IO.Compression.DeflateStream = New System.IO.Compression.DeflateStream(ms2, Compression.CompressionMode.Decompress)
                ReDim CompressBuf(decompressedBufferLength - 1) '11711
                dStream2.Read(CompressBuf, 0, decompressedBufferLength) '11712
            End Using
        End Using

        res = uncompress(DecompressBuf, DecompressLen, CompressBuf, CompressLen)

        DelSole.DotZLibCompressor.DotZLib.DeCompressBytes(CompressBuf, CompressBuf.Length) ', DecompressBuf)


Je vous remercie par avance pour l'aide que vous pourriez m'apporter !!

Nckb

1 réponse

Utilisateur anonyme
11 mars 2013 à 22:14
Bonjour,

La classe System.Text.Encoding peut t'aider :
'transforme un tableau en données ASCII 
Dim Ascii As String = System.Text.Encoding.ASCII.GetString(tableau)

La classe Convert également :
'convertit une chaine en tableau 
Dim tableau() As Byte = Convert.FromBase64String("donnees")
'convertit un tableau en chaîne
Dim Chaine As String = Convert.ToBase64String(tableau)


Tu peux aussi t'aider de cette discussion pour la compression et décompression de données zippées.
Rejoignez-nous