微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将二进制数据转换为 gzip 文件并解压为字符串 c#

如何解决将二进制数据转换为 gzip 文件并解压为字符串 c#

我正在尝试解码表示 gzip 文件的二进制数据,我需要解压缩 gzip 以便我可以获得 gzip 中的 nbt(minecraft 符号)字符串,但是我在 GZipStream 中不断收到以下错误。阅读:

存档条目是使用不受支持的压缩方法压缩的。

有人知道如何做到这一点吗?

这是我的代码

public static string Decompress(string input)
{
    byte[] compressed = Convert.FromBase64String(input); //This is the binary data
    byte[] decompressed = Decompress(compressed);
    return Encoding.UTF8.GetString(decompressed);
}

private static byte[] Decompress(byte[] input)
{
    using (var source = new MemoryStream(input))
    {
        byte[] lengthBytes = new byte[4];
        source.Read(lengthBytes,4);

        var length = BitConverter.ToInt32(lengthBytes,0);
        using (var decompressionStream = new GZipStream(source,CompressionMode.Decompress))
        {
            var result = new byte[length];
            decompressionStream.Read(result,length); //Error
            return result;
        }
    }
}

解决方法

这应该适合你:

public static string Decompress(string value)
{
    byte[] buffer = Convert.FromBase64String(value);
    byte[] decompressed;

    using (var inputStream = new MemoryStream(buffer))
    {
        using var outputStream = new MemoryStream();

        using (var gzip = new GZipStream(inputStream,CompressionMode.Decompress,leaveOpen: true))
        {
            gzip.CopyTo(outputStream);
        }

        decompressed = outputStream.ToArray();
    }

    return Encoding.UTF8.GetString(decompressed);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。