c# - Gzipped 内容不反射(reflect)输入

标签 c# gzip

我有一个非常简单的 gzip 方法:

    public byte[] Compress(string input)
    {
        var bytes = Encoding.UTF8.GetBytes(input);

        using (var msi = new MemoryStream(bytes))
        using (var mso = new MemoryStream())
        using (var gz = new GZipStream(mso, CompressionMode.Compress))
        {
            msi.CopyTo(gz);

            return mso.ToArray();
        }
    }

但是,单元测试失败了。即使传入一个简单的短字符串也无法正确压缩。例如"this is a test" 变成一个包含 10 个元素的字节数组:[31,139,8,0,0,0,0,0,4,0] 当然没有正确解压缩。这里出了什么问题?这直接来自 msdn!

最佳答案

您需要刷新 关闭流以进行压缩。在您调用 mso.ToArray() 时,GZipStream 尚未压缩任何内容,正在等待更多数据。

一个简单的解决方案:

public byte[] Compress(string input)
{
    var bytes = Encoding.UTF8.GetBytes(input);

    using (var msi = new MemoryStream(bytes))
    using (var mso = new MemoryStream())
    {
        using (var gz = new GZipStream(mso, CompressionMode.Compress))
        {
            msi.CopyTo(gz);
        }

        return mso.ToArray();
    }
}

关于c# - Gzipped 内容不反射(reflect)输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41763738/

相关文章:

python - 在 Python 中读取 .tar.gz 文件

c# - 在特定实例上触发的委托(delegate)和事件

c# - 崩溃的 .NET 框架

c# - 自切换到 VS 2015 并使用 C#6 Roslyn 功能后,Visual Studio Online CI 每日构建失败

c# - Google ReCaptcha v2 Bootstrap 的对齐

c# - 用户控制事件

php - 无论如何改进我的 gzip PHP 方法?

c++ - 通过被动库提取 gzip

Android:HTTP 通信应使用 "Accept-Encoding: gzip"

django - Apache 在响应 gzip 压缩请求时出现滞后