【问题标题】:Gzipstream over tcp not decompressingGzipstream over tcp 不解压
【发布时间】:2012-07-01 18:49:11
【问题描述】:

我正在尝试使用protobuf-netGzipStream

从 zipstream 中反序列化或读取只是阻塞并且没有完成。

为了测试它,我选择尝试使用更简单的FileStream 来查看数据实际上正在被压缩和写入,它就是这样。 但是,Console.writeLine(inPerson1.name) 行会抛出 Object reference not set exception,因为它似乎没有从 zipstream 中读取任何数据。

关于为什么或我做错了什么有什么想法吗?

代码:

public void TestZipToFile(){
  var person1 = new Person { id = 1, name = "Pete" };
  var person2 = new Person { id = 2, name = "Sarah" };
  using (var file = File.Create("people.bin"))
  {
    GZipStream zs = new GZipStream(file, CompressionMode.Compress);
    Serializer.SerializeWithLengthPrefix<Person>(zs, person1, PrefixStyle.Fixed32);//.Serialize(file, foo);
    Serializer.SerializeWithLengthPrefix<Person>(zs, person2, PrefixStyle.Fixed32);//.Serialize(file, foo);
  }
  Person inPerson1 = null;
  Person inPerson2 = null;
  using (var file = File.OpenRead("people.bin"))
  {
    GZipStream ozs = new GZipStream(file, CompressionMode.Decompress);
    inPerson1 = Serializer.DeserializeWithLengthPrefix<Person>(ozs,PrefixStyle.Fixed32);//.Deserialize<Foo>(file);
    inPerson2 = Serializer.DeserializeWithLengthPrefix<Person>(ozs, PrefixStyle.Fixed32);//.Deserialize<Foo>(file);
  }
  Console.WriteLine(inPerson1.name);
  Console.WriteLine(inPerson2.name);
}

[ProtoContract]
public class Person
{
  [ProtoMember(1)
  public int id;
  [ProtoMember(2)]
  public string name;
}

【问题讨论】:

    标签: c# stream compression gzipstream


    【解决方案1】:

    你永远不会关闭输出GZipStream,所以我怀疑它最终永远不会向底层流写入任何内容。每个GZipStreamFileStream 都应该有一个using 语句。

    【讨论】:

    • 是的!我非常感激。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    相关资源
    最近更新 更多