Bonjour à tous,
Je manipule des fichier XML dans mon application. Pour les stocker en base je les converti en base 64 puis je les compresse. Voici ma fonction qui me permet de faire l'opération inverse (décompression puis décode base 64):
Jusqu'à la boucle, tout se passe bien. La chaine compressée est bien la même que celle que j'ai obtenu avant de l'enregistrer en base.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 // Convert byte[] to MemoryStream, xCblBodyB64GZip (byte[]) contient ce qui est stocké en base MemoryStream xCblBodyB64GZipMemoryStream = new MemoryStream (xCblBodyB64GZip); GZipStream xCblBodyB64GzipStream = new GZipStream (xCblBodyB64GZipMemoryStream, CompressionMode.Decompress); // Uncompress GZipStream in byte[1024] and store them in MemoryStream MemoryStream xCblBodyB64MemoryStream = new MemoryStream (); byte[] buffer = new byte[1024]; int readBytes; // On lit des paquets de 1024 bytes dans buffer puis on les mets les uns à la suite des autres dans un MemoryStream. while ((readBytes = xCblBodyB64GzipStream.Read (buffer, 0, buffer.Length)) > 0) xCblBodyB64MemoryStream.Write (buffer, 0, readBytes); xCblBodyB64MemoryStream.Position = 0; // Convert from MemoryStream to byte[] byte[] xCblBodyB64BytesArray = new byte[xCblBodyB64MemoryStream.Length]; xCblBodyB64MemoryStream.Read (xCblBodyB64BytesArray, 0, xCblBodyB64BytesArray.Length); // Convert byte[] to base 64 string xCblBodyB64 = System.Text.Encoding.UTF8.GetString (xCblBodyB64BytesArray); // Convert base 64 to byte[] byte[] xCblBodyBytesArray = Convert.FromBase64String (xCblBodyB64); // Convert from byte[] to string xCblBody = System.Text.Encoding.UTF8.GetString (xCblBodyBytesArray);
La boucle lit des paquets de 1024 bytes et les enregistre dans un memory stream. Le résultat de la décompression est bien identique à ce que j'avais avant compression SAUF le dernier byte qui a disparu ...
readBytes me donne une unité de moins que ce qu'il devrait et le tableau buffer ne contient pas le dernier byte attendu.
Avez-vous une idée?
Merci d'avance
Partager