使用的C#代码 如何Google.Protobuf 进行压缩
时间: 2024-02-06 17:09:00 浏览: 86
C#中使用二进制和ProtoBuf分别进行序列化、反序列化、压缩、解压缩对比测试示例源码.zip
4星 · 用户满意度95%
使用Google.Protobuf进行压缩,需要使用Gzip压缩算法。以下是C#代码示例:
```csharp
using System.IO;
using System.IO.Compression;
using Google.Protobuf;
public static byte[] CompressMessage(IMessage message)
{
using (var stream = new MemoryStream())
{
message.WriteTo(stream);
stream.Seek(0, SeekOrigin.Begin);
using (var compressedStream = new MemoryStream())
{
using (var gzipStream = new GZipStream(compressedStream, CompressionMode.Compress))
{
stream.CopyTo(gzipStream);
}
return compressedStream.ToArray();
}
}
}
public static T DecompressMessage<T>(byte[] compressedData) where T : IMessage<T>, new()
{
using (var compressedStream = new MemoryStream(compressedData))
{
using (var gzipStream = new GZipStream(compressedStream, CompressionMode.Decompress))
{
var message = new T();
message.MergeFrom(gzipStream);
return message;
}
}
}
```
在上面的代码中,`CompressMessage`方法将`IMessage`对象写入到`MemoryStream`中,然后使用`GZipStream`对其进行压缩,并将压缩后的数据返回为字节数组。`DecompressMessage`方法将压缩后的数据读取到`MemoryStream`中,并使用`GZipStream`对其进行解压缩,最后返回解压缩后的`IMessage`对象。
使用示例:
```csharp
// 假设有一个TestMessage的protobuf对象
var message = new TestMessage { Id = 1, Name = "Test" };
// 压缩protobuf对象
var compressedData = CompressMessage(message);
// 解压缩protobuf对象
var decompressedMessage = DecompressMessage<TestMessage>(compressedData);
```
阅读全文