c# - 通过 BinaryReader 将字节数组解压缩为字符串会产生空字符串

标签 c# memorystream gzipstream binaryreader

我正在尝试解压缩字节数组并使用二进制读取器将其转换为字符串。执行以下代码时,inStream位置从0变为数组长度,但str始终为空字符串。

BinaryReader br = null;
string str = String.Empty;

using (MemoryStream inStream = new MemoryStream(pByteArray))
{
    GZipStream zipStream = new GZipStream(inStream, CompressionMode.Decompress);
    BinaryReader br = new BinaryReader(zipStream);
    str = br.ReadString();
    inStream.Close();
    br.Close();
}

最佳答案

您还没有展示数据是如何被压缩的,但这里有一个压缩和解压缩缓冲区的完整示例:

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

class Program
{
    static void Main()
    {
        var test = "foo bar baz";

        var compressed = Compress(Encoding.UTF8.GetBytes(test));
        var decompressed = Decompress(compressed);
        Console.WriteLine(Encoding.UTF8.GetString(decompressed));
    }

    static byte[] Compress(byte[] data)
    {
        using (var compressedStream = new MemoryStream())
        using (var zipStream = new GZipStream(compressedStream, CompressionMode.Compress))
        {
            zipStream.Write(data, 0, data.Length);
            zipStream.Close();
            return compressedStream.ToArray();
        }
    }

    static byte[] Decompress(byte[] data)
    {
        using (var compressedStream = new MemoryStream(data))
        using (var zipStream = new GZipStream(compressedStream, CompressionMode.Decompress))
        using (var resultStream = new MemoryStream())
        {
            zipStream.CopyTo(resultStream);
            return resultStream.ToArray();
        }
    }
}

关于c# - 通过 BinaryReader 将字节数组解压缩为字符串会产生空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7013771/

相关文章:

C#:从 XML 实例化类

c# - 如何在MemoryStream中显示图像?

c# - GZipStream 和解压

.net - MemoryStream,无法访问关闭的流

c# - 安全访问 MemoryStream 中的数据

java - 使用 GZIPOutputStream 压缩以上传而不在本地创建 gzip 文件

.net - 什么会导致 GZipStream 压缩数据过多地填充零?

c# - 连接未关闭。连接的当前状态是打开的。 C#错误

c# - .NET 中基于屏幕键盘的组合框建议

c# - 如何在 Linux 终端上编译 C# 代码?