在网络通信中,数据体积直接影响传输效率和用户体验。C#自带的System.IO.Compression命名空间中的GZipStream类,能够基于GZip算法对数据进行压缩,从而减小网络传输体积。下面通过具体示例说明其用法。

使用GZipStream压缩字节数组
最常见的方式是将原始数据转为字节数组,再利用MemoryStream和GZipStream完成压缩。以下代码演示了压缩与解压的完整过程:
using System;
using System.IO;
using System.IO.Compression;
using System.Text;
class Program
{
// 压缩字节数组
static byte[] Compress(byte[] data)
{
using (MemoryStream ms = new MemoryStream())
{
using (GZipStream gzip = new GZipStream(ms, CompressionMode.Compress))
{
gzip.Write(data, 0, data.Length);
}
return ms.ToArray();
}
}
// 解压字节数组
static byte[] Decompress(byte[] data)
{
using (MemoryStream ms = new MemoryStream(data))
{
using (GZipStream gzip = new GZipStream(ms, CompressionMode.Decompress))
{
using (MemoryStream outMs = new MemoryStream())
{
gzip.CopyTo(outMs);
return outMs.ToArray();
}
}
}
}
static void Main()
{
string text = "这是一段需要通过网络传输的测试文本数据";
byte[] original = Encoding.UTF8.GetBytes(text);
byte[] compressed = Compress(original);
byte[] decompressed = Decompress(compressed);
Console.WriteLine("原始长度: " + original.Length);
Console.WriteLine("压缩后长度: " + compressed.Length);
Console.WriteLine("解压文本: " + Encoding.UTF8.GetString(decompressed));
}
}
在HTTP传输中减小体积
若使用HttpClient发送内容,可先将请求体压缩后再发送,服务端接收后解压。注意,使用GZipStream时务必在写入完成后释放流,否则压缩数据可能不完整。
压缩字符串的辅助方法
实际项目中常封装为工具方法:
static byte[] CompressString(string str)
{
byte[] bytes = Encoding.UTF8.GetBytes(str);
return Compress(bytes);
}
注意事项
- GZipStream适用于文本、JSON、XML等冗余度高的数据,二进制图片压缩收益较低。
- 压缩会消耗CPU资源,需权衡带宽节省与计算开销。
- 解压时需捕获InvalidDataException,防止数据损坏导致异常。
合理使用GZipStream,可以在不改变业务协议的前提下,有效降低C#应用的网络传输体积。
C#GZipStream网络传输数据压缩修改时间:2026-07-25 09:42:12