反序列化压缩字符串时出错(解析完成之前遇到的Stream End)C#

ak1*_*ak1 1 .net c# compression serialization gzipstream

我在反序列化字符串时遇到异常[System.Runtime.Serialization.SerializationException:在流分析结束之前遇到流结束。]请指导我该怎么做才能解决此错误。

byte[] compressed;

string content = "afjsklf lkjflfkldsflkfj fa fj lflkf lk kj lkj fldsjf lkflewru pjdslk jsdfi;j klnvmlvnetu iowu lknxvmln3-958u09v lsn";

var compMS = new MemoryStream();
using (var compressor = new GZipStream(compMS, CompressionMode.Compress))
{
    new BinaryFormatter().Serialize(compressor, content);
    compressed = compMS.ToArray();
}

var decompMS = new MemoryStream(compressed);
using (var decompressor = new GZipStream(decompMS, CompressionMode.Decompress))
{
    BinaryFormatter bf = new BinaryFormatter();
    decompMS.Position = 0;
    string result = (string)bf.Deserialize(decompMS);

}
Run Code Online (Sandbox Code Playgroud)

我也尝试使用,decompMS.Seek(0, SeekOrigin.Begin);但异常仍然存在。

http://dotnetfiddle.net/PF7egd

小智 5

您的代码中有2个问题。

  • 您在关闭压缩器之前(在第一个using块之后)执行compMS.ToArray()
  • 在解压缩中,您尝试反序列化原始数据而不是解压缩的数据

看看新的小提琴:http : //dotnetfiddle.net/OryftE

或此处的更正代码:

byte[] compressed;

string content = "afjsklf lkjflfkldsflkfj fa fj lflkf lk kj lkj fldsjf lkflewru pjdslk jsdfi;j klnvmlvnetu iowu lknxvmln3-958u09v lsn";

var compMS = new MemoryStream();
using (var compressor = new GZipStream(compMS, CompressionMode.Compress))
{
    new BinaryFormatter().Serialize(compressor, content);
}

compressed = compMS.ToArray();

var decompMS = new MemoryStream(compressed);
using (var decompressor = new GZipStream(decompMS, CompressionMode.Decompress))
{
    BinaryFormatter bf = new BinaryFormatter();
    decompMS.Position = 0;
    string result = (string)bf.Deserialize(decompressor);

}
Run Code Online (Sandbox Code Playgroud)

希望能有所帮助。

最好的问候,克里斯