//添加引用
using System.IO.Compression;
//
压缩数组
public
unsafe
static
byte
[] Compress(
byte
[] data)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
MemoryStream ms = new MemoryStream();
Stream zipStream = new GZipStream(ms, CompressionMode.Compress, true);
zipStream.Write(data, 0, data.Length);
zipStream.Close();
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
byte[] newByteArray = new byte[ms.Length];
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
ms.Seek(0, SeekOrigin.Begin);
ms.Read(newByteArray, 0, newByteArray.Length);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//zipStream.Write(buffer, 0, buffer.Length);
//zipStream.Read(newByteArray, 0, (int)ms.Length);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return newByteArray;
}
//
解压缩数组
public
unsafe
static
byte
[] DeCompress(
byte
[] data)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
MemoryStream ms = new MemoryStream();
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
ms.Write(data, 0, data.Length);
ms.Seek(0, SeekOrigin.Begin);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Stream zipStream = new GZipStream(ms, CompressionMode.Decompress,false);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
byte[] newByteArray = RetrieveBytesFromStream(zipStream, 1);
return newByteArray;
}
public
unsafe
static
byte
[] RetrieveBytesFromStream(Stream stream,
int
bytesblock)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
//---从一个流对象中检索字节---
List<byte> lst = new List<byte>();
byte[] data=new byte[2];
int totalCount = 0;
try
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
while (true)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
//'---逐渐地增加数据字节数组-的大小--
int bytesRead = stream.Read(data, totalCount, bytesblock);
if (bytesRead == 0)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
break;
}
lst.Add(data[data.Length - 1]);
totalCount += bytesRead;
data = new byte[totalCount+1];
}
//'---确保字节数组正确包含提取的字节数---
byte[] data2 = new byte[totalCount];
lst.CopyTo(data2, 0);
return data2;
}
catch (Exception ex)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
//MsgBox(ex.ToString)
return new byte[0];
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
private
void
button1_Click(
object
sender, EventArgs e)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
int len = 10*1024;
byte[] data = new byte[len];
Random rnd = new Random(255);
for (int i = 0; i < len; i++)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
data[i] = (byte)(int)(i/45);
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
int t1 = System.Environment.TickCount;
byte[] data2 = Compress(data);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//byte[] data3 = DeCompress(data2);
int t2=System.Environment.TickCount;
MessageBox.Show(string.Format("耗时 {0} 耗秒.压缩比{1}/{2}={3}", t2 - t1, data2.Length, data.Length, data2.Length*1.0/data.Length));
}
转载于:https://www.cnblogs.com/helper/articles/1229247.html