G
Guest
Hello!
I have a problem using the System.IO.Compression.GZipStream class. I wrote
the following methods to compress and decompress arrays of bytes.
private static byte[] Compress(byte[] array)
{
MemoryStream stream = new MemoryStream();
GZipStream gZipStream = new GZipStream(stream, CompressionMode.Compress);
gZipStream.Write(array, 0, array.Length);
return stream.ToArray();
}
private static byte[] Decompress(byte[] array)
{
MemoryStream stream = new MemoryStream();
GZipStream gZipStream = new GZipStream(new MemoryStream(array),
CompressionMode.Decompress);
byte[] b = new byte[4096];
while (true)
{
int n = gZipStream.Read(b, 0, b.Length);
if (n > 0)
stream.Write(b, 0, n);
else
break;
}
return stream.ToArray();
}
In the Decompress method, if the array of bytes is small (apparently smaller
than 4096 bytes), then the Read method returns 0 regardless the size of the b
buffer. Also, replacing the while block with the following one, if the array
of bytes is small, then the ReadByte method returns -1.
while (true)
{
int n = gZipStream.ReadByte();
if (n != -1)
stream.WriteByte((byte)n);
else
break;
}
Is this happening because the GZipStream class internally uses a 4 KB
buffer? Anyway, how could I solve the problem?
Thank you,
Fabio
I have a problem using the System.IO.Compression.GZipStream class. I wrote
the following methods to compress and decompress arrays of bytes.
private static byte[] Compress(byte[] array)
{
MemoryStream stream = new MemoryStream();
GZipStream gZipStream = new GZipStream(stream, CompressionMode.Compress);
gZipStream.Write(array, 0, array.Length);
return stream.ToArray();
}
private static byte[] Decompress(byte[] array)
{
MemoryStream stream = new MemoryStream();
GZipStream gZipStream = new GZipStream(new MemoryStream(array),
CompressionMode.Decompress);
byte[] b = new byte[4096];
while (true)
{
int n = gZipStream.Read(b, 0, b.Length);
if (n > 0)
stream.Write(b, 0, n);
else
break;
}
return stream.ToArray();
}
In the Decompress method, if the array of bytes is small (apparently smaller
than 4096 bytes), then the Read method returns 0 regardless the size of the b
buffer. Also, replacing the while block with the following one, if the array
of bytes is small, then the ReadByte method returns -1.
while (true)
{
int n = gZipStream.ReadByte();
if (n != -1)
stream.WriteByte((byte)n);
else
break;
}
Is this happening because the GZipStream class internally uses a 4 KB
buffer? Anyway, how could I solve the problem?
Thank you,
Fabio