J'essaie de décompresser un GZipStream. Le problème est que la propriété "Length" du flux génère une exception "NotSupported". Comment puis-je savoir quelle taille donner à mon tampon lorsque je lis les octets du flux ? Comme il est compressé, je ne sais pas quelle sera la taille de la version non compressée. Avez-vous des suggestions ?
Réponses
Trop de publicités?Pourquoi avez-vous besoin de ça ?
public static byte[] Decompress(this byte[] data)
{
var ms = new MemoryStream(data);
var s = new GZipStream(ms, CompressionMode.Decompress);
var output = new MemoryStream();
byte[] buffer = new byte[8192];
int read = 0;
while ((read = s.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, read);
}
return output.ToArray();
}
Rune Grimstad
Points
17775
En fonction de ce que vous allez en faire, vous pouvez écrire le contenu non compressé dans un MemoryStream ou un FileStream. Ils peuvent tous deux être configurés pour étendre leurs tampons si nécessaire.
Le MemoryStream possède également une méthode ToArray qui extrait son contenu sous forme de tableau d'octets.