gpt4 book ai didi

c# - SharpZipLib 压缩字符串

转载 作者:太空宇宙 更新时间:2023-11-03 17:43:56 40 4
gpt4 key购买 nike

我需要压缩一个字符串以减小 Web 服务响应的大小。我在 SharpZipLib 示例中看到了单元测试,但不是我所需要的示例。

在下面的代码中,ZipOutputStream 的构造函数返回异常:“No open entry”

        byte[] buffer = Encoding.UTF8.GetBytes(SomeLargeString);
Debug.WriteLine(string.Format("Original byes of string: {0}", buffer.Length));

MemoryStream ms = new MemoryStream();
using (ZipOutputStream zipStream = new ZipOutputStream(ms))
{
zipStream.Write(buffer, 0, buffer.Length);
Debug.WriteLine(string.Format("Compressed byes: {0}", ms.Length));
}

ms.Position = 0;
MemoryStream outStream = new MemoryStream();

byte[] compressed = new byte[ms.Length];
ms.Read(compressed, 0, compressed.Length);

byte[] gzBuffer = new byte[compressed.Length + 4];
System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);
System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);
string compressedString = Convert.ToBase64String (gzBuffer);

我哪里偏离了轨道?我是否使它变得比它应该的更复杂?

最佳答案

对于来自 Silverlight 的 Web 服务通信压缩数据,我使用此代码段:

private byte[] zipText(string text)
{
if (text == null)
return null;

using(Stream memOutput = new MemoryStream())
{
using (GZipOutputStream zipOut = new GZipOutputStream(memOutput))
{
using (StreamWriter writer = new StreamWriter(zipOut))
{
writer.Write(text);

writer.Flush();
zipOut.Finish();

byte[] bytes = new byte[memOutput.Length];
memOutput.Seek(0, SeekOrigin.Begin);
memOutput.Read(bytes, 0, bytes.Length);

return bytes;
}
}
}
}

private string unzipText(byte[] bytes)
{
if (bytes == null)
return null;

using(Stream memInput = new MemoryStream(bytes))
using(GZipInputStream zipInput = new GZipInputStream(memInput))
using(StreamReader reader = new StreamReader(zipInput))
{
string text = reader.ReadToEnd();

return text;
}
}
  1. 我使用 GZip 而不是 Zip 压缩
  2. 预计文本将从类似的环境中读/写,所以我没有做任何额外的编码/解码。

我的案例是json数据的压缩。根据我的观察,在某些情况下,大约 95Kb 的文本数据被压缩到 1.5Kb。所以连数据都会序列化成base 64,反正都很好节省流量。

发布了我的答案,可能会节省一些时间。

关于c# - SharpZipLib 压缩字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9830428/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com