gpt4 book ai didi

c# - GZipStream - block 长度与其补码不匹配

转载 作者:行者123 更新时间:2023-11-30 16:45:58 26 4
gpt4 key购买 nike

我试图通过 TCP 将对象作为字符串传输到另一台机器。我决定使用 BinaryFormatter 的组合,然后使用 GZipStream,然后在发送之前对其进行 Base64 编码。在另一端,我做相反的事情——解码字符串,GZipStream 解压缩它,然后最后反序列化它。只有当我这样实现它时它才不起作用。获取 “ block 长度与其补码不匹配。”异常

        string s = new String('@', 10000);
string s2 = "";

string data;

using (var ms = new MemoryStream())
{
using (var gzip = new GZipStream(ms, CompressionMode.Compress))
{
var bf = new BinaryFormatter();
bf.Serialize(gzip, s);

gzip.Flush();
ms.Flush();

data = Convert.ToBase64String(ms.GetBuffer());
}
}

using (var ms = new MemoryStream(Convert.FromBase64String(data)))
{
using (var gzip = new GZipStream(ms, CompressionMode.Decompress, true))
{
var binaryFormatter = new BinaryFormatter();
s2 = binaryFormatter.Deserialize(gzip) as string;
}
}

if (s != s2)
{
Console.WriteLine("Doesnt match");
}

结果未处理的异常:System.IO.InvalidDataException: block 长度与其补码不匹配。

有什么想法吗?最让我困惑的是,当我在本地摆脱 Base64 编码时,它工作正常。

最佳答案

在将其分配给变量数据之前,您需要关闭 GZipStream。

...
bf.Serialize(gzip, s);

gzip.Close();

data = Convert.ToBase64String(ms.GetBuffer());

关于c# - GZipStream - block 长度与其补码不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41168774/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com