【问题标题】:Error in deserializing a compressed string (End of Stream encountered before parsing was completed) C#反序列化压缩字符串时出错(在解析完成之前遇到流结束)C#
【发布时间】:2023-04-07 06:55:01
【问题描述】:

我遇到异常[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);

}

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

http://dotnetfiddle.net/PF7egd

【问题讨论】:

    标签: c# .net serialization compression gzipstream


    【解决方案1】:

    您的代码中有 2 个问题。

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

    看看新的小提琴: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);
    
    }
    

    希望对您有所帮助。

    最好的问候, 克里斯

    【讨论】:

    • 谢谢,很有帮助:)
    • 我的问题是像你说的那样在 using 语句中调用 .ToArray() 。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多