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

C# 无法从NetworkSteam(zlib)解压缩消息,c#,model-view-controller,networkstream,C#,Model View Controller,Networkstream,我有问题。 我将XML请求发送到NetworkStream,得到答案[head]-未压缩,和[body]-压缩的zlib 当我使用代码时 public static string UnZipStr(byte[] input) { using (MemoryStream inputStream = new MemoryStream(input)) { using (DeflateStream gzip =

我有问题。 我将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:“解码期间检测到错误数据。”

我确实删除了[head](只是不读取前100字节=大小head),但结果是一样的

当我用它的时候

 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。和两次-用正确和错误的标志

一条解压缩消息:
(��]�R�F\u0012}�W�����N��R�5\0F���ƅ\n��uT[�J�-���_��(Q$H)��,��v�+���我@����\u0003��Vl˔h���ӧ/x������ã��\u000e��Z��-G���O��\u001f��ۭ我看不出您发布的代码有任何问题。问题一定出在您未发布的代码中。因此,无论在
Deflate(…)
UnZipStr(…)
之间做了什么,都一定是更改了您的压缩数据

直接使用
Deflate(…)
的输出作为
UnZipStr(…)
的输入,您可以自己尝试一下:

请创建并发布一个,这意味着您将发布如何压缩和解压示例中的某些数据。这可能会帮助您自己发现错误,也可能会给我们一些测试和调试来帮助您。这里有太多的未知数,除了说“您做错了什么”之外这里几乎没有人能做什么。
 public string postXMLData(string request)
    {
        int port = XXXXX;
        string ip = "XXX.XXX.XXX.XX";
        int idClient = XXX;
        StringBuilder response = new StringBuilder();
        int byteSizeBuf = 1024;
        byte[] buff = new byte[byteSizeBuf * 100];

        byte[] byteRequest = Encoding.UTF8.GetBytes(request);
        ConnectionMode connectionMode = ConnectionMode.Plain;
        QueryHeader test = new QueryHeader(idClient, byteRequest.Length, connectionMode);

        byte[] data = new byte[byteSizeBuf];
        byte[] res = new byte[test.MessageLength + byteRequest.Length];

        test.HeaderData.CopyTo(res, 0);
        byteRequest.CopyTo(res, test.HeaderData.Length);

        TcpClient tcpClient = new TcpClient();
        tcpClient.Connect(ip, port);
        NetworkStream netStream = tcpClient.GetStream();
        netStream.Write(res, 0, res.Length);

        string final = response.ToString(); //куда записывать

        int pos = 0;
        do
        {
            int bytes = netStream.Read(data, 0, data.Length);
            response.Append(Encoding.UTF8.GetString(data, 0, bytes));
            data.CopyTo(buff, pos);
            pos += data.Length;
        }
        while (netStream.DataAvailable);

        string decodedStr = UnZipStr(buff);

        netStream.Close();
        tcpClient.Close();

        return final;
    }
Console.WriteLine(UnZipStr(
    Deflate(System.Text.Encoding.UTF8.GetBytes("Hello World!"), 9, false).ToArray()
));