我有问题。我将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。当服务器发送非压缩消息给我时-我得到真实消息。
我看不到您发布的代码有任何问题。问题一定出在您未发布的代码中。因此,在Deflate(...)
和UnZipStr(...)
之间执行任何操作都必须更改您的压缩数据。
只需直接使用Deflate(...)
的输出作为UnZipStr(...)
的输入来自己尝试:
Console.WriteLine(UnZipStr(
Deflate(System.Text.Encoding.UTF8.GetBytes("Hello World!"), 9, false).ToArray()
));