无法从NetworkSteam解压缩消息(zlib)

问题描述 投票:0回答:1

我有问题。我将XML请求发送到NetworkStream,并得到答案[head]-未压缩,[body]-压缩zlib。

当我使用代码时

public static string UnZipStr(byte[] input)
    {
        using (MemoryStream inputStream = new MemoryStream(input))
        {
            using (DeflateStream gzip =
              new DeflateStream(inputStream, CompressionMode.Decompress))
            {
                using (StreamReader reader =
                  new StreamReader(gzip, System.Text.Encoding.UTF8))
                {
                    return reader.ReadToEnd();
                }
            }
        }
    }

我收到错误

System.IO.InvalidDataException:“解码期间检测到错误数据。”

我做了delele [head](只是不读第一个100字节= size头,但是结果是相同的。

当我使用它时

 private MemoryStream Deflate(byte[] data, int level, bool zlib)
    {
        var memoryStream = new MemoryStream();

        var deflater = new Deflater(level, !zlib);
        using (DeflaterOutputStream outStream = new DeflaterOutputStream(memoryStream, deflater))
        {
            outStream.IsStreamOwner = false;
            outStream.Write(data, 0, data.Length);
            outStream.Flush();
            outStream.Finish();
        }
        return memoryStream;
    }

我的消息不是真实的阅读。我不知道等级,因为我用了所有-从1到9。还有两次-用true和false标志。

解压消息的部分:(��]r�F\ u0012}�W�����n��r�5\0F���\n��uT[�J�-���_��(Q $ H ��,��v�+���i@��\u0003��Vl˔h���ӧ/x������ã��\u000e��z��-g�� �O�\u001f��ۭ

我如何解压缩消息?

ps.s。当服务器发送非压缩消息给我时-我得到真实消息。

c# model-view-controller networkstream
1个回答
0
投票

我看不到您发布的代码有任何问题。问题一定出在您未发布的代码中。因此,在Deflate(...)UnZipStr(...)之间执行任何操作都必须更改您的压缩数据。

只需直接使用Deflate(...)的输出作为UnZipStr(...)的输入来自己尝试:

Console.WriteLine(UnZipStr(
    Deflate(System.Text.Encoding.UTF8.GetBytes("Hello World!"), 9, false).ToArray()
));
© www.soinside.com 2019 - 2024. All rights reserved.