gpt4 book ai didi

.net - GZipStream:为什么压缩后要转换为 Base 64?

转载 作者:行者123 更新时间:2023-12-02 17:34:19 24 4
gpt4 key购买 nike

我只是在查看用于压缩字符串的代码示例。我发现使用 GZipStream 类就足够了。但我不明白为什么我们必须将其转换为 Base 64 字符串,如示例所示。

using System.IO.Compression;
using System.Text;
using System.IO;

public static string Compress(string text)
{
byte[] buffer = Encoding.UTF8.GetBytes(text);
MemoryStream ms = new MemoryStream();

using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true))
{
zip.Write(buffer, 0, buffer.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);
return Convert.ToBase64String(gzBuffer);
}

此外,我不明白我的 gzBuffer 被初始化为大小 compressed.Length + 4。其实我也不明白为什么我们有最后几句话。有人可以分享一些光芒吗?

最佳答案

最有可能的是,基于 64 的字符串可以被视为纯文本,例如用于打印,包括在电子邮件或类似的内容中。 编辑:现在我看到 source ,他们说他们想将其插入到 XML 文件中,所以这就是为什么他们需要是纯文本。

由于下一行 - BlockCopy,因此需要 compressed.Length + 4 大小。它开始将 4 个字节复制到 gzBuffer 中。 (第四个参数是目标缓冲区的字节偏移量)。第二个 BlockCopy 将压缩字符串的长度放入目标缓冲区的前四个字节中。我不确定为什么它需要这里的长度,但很可能有一个相应的解码例程它必须与之对齐。

编辑:长度用于解压缩例程,以便程序知道解压缩的字节缓冲区应该有多长。

关于.net - GZipStream:为什么压缩后要转换为 Base 64?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3227112/

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