两端代码:用于压缩的
(1) private byte[] myCompress(byte[] data)
{
MemoryStream ms = new MemoryStream();
GZipStream compressStream = new GZipStream(ms, CompressionMode.Compress, true);
compressStream.Write(data, 0, data.Length);
compressStream.Close();
ms.Close(); return ms.ToArray(); //直接返回
}
(2) private byte[] Compress(byte[] data)
{
MemoryStream ms = new MemoryStream();
GZipStream compressStream = = new GZipStream(ms, CompressionMode.Compress, true);
compressStream.Write(data, 0, data.Length);
compressStream.Close(); ms.Position = 0;
byte[] compressed_data = new byte[ms.Length]; //把流中的内容再写入到一个新的字节数组
ms.Read(compressed_data, 0, int.Parse(ms.Length.ToString()));
return compressed_data;
}
我自己写的代码是第一段,但我见过别人按第二种方式写的,直接返回ms.ToArray()好像也是可以的,
为什么第二段还要额外写那么多代码ms.Read(compressed_data, 0, int.Parse(ms.Length.ToString()))用这种方式再把流写入一个字节数组返回呢?
是不是其中另有蹊跷?
(1) private byte[] myCompress(byte[] data)
{
MemoryStream ms = new MemoryStream();
GZipStream compressStream = new GZipStream(ms, CompressionMode.Compress, true);
compressStream.Write(data, 0, data.Length);
compressStream.Close();
ms.Close(); return ms.ToArray(); //直接返回
}
(2) private byte[] Compress(byte[] data)
{
MemoryStream ms = new MemoryStream();
GZipStream compressStream = = new GZipStream(ms, CompressionMode.Compress, true);
compressStream.Write(data, 0, data.Length);
compressStream.Close(); ms.Position = 0;
byte[] compressed_data = new byte[ms.Length]; //把流中的内容再写入到一个新的字节数组
ms.Read(compressed_data, 0, int.Parse(ms.Length.ToString()));
return compressed_data;
}
我自己写的代码是第一段,但我见过别人按第二种方式写的,直接返回ms.ToArray()好像也是可以的,
为什么第二段还要额外写那么多代码ms.Read(compressed_data, 0, int.Parse(ms.Length.ToString()))用这种方式再把流写入一个字节数组返回呢?
是不是其中另有蹊跷?
byte[] compressed_data = new byte[ms.Length]; //把流中的内容再写入到一个新的字节数组
ms.Read(compressed_data, 0, int.Parse(ms.Length.ToString()));
return compressed_data;
private byte[] Compress(byte[] data) 这里要求是返回一个byte[]类型的
至于第一个会不会出异常你自己试一下就知道了
ms.ToArray()返回的是byte[]