C# tcp上的Gzipstream未解压缩

C# tcp上的Gzipstream未解压缩,c#,stream,compression,gzipstream,C#,Stream,Compression,Gzipstream,我正在尝试使用protobuf-net和通过tcp连接发送序列化的压缩数据 GzipStream 从zipstream进行的反序列化或读取只是阻塞,不会完成 为了测试它,我选择尝试使用一个更简单的FileStream,以查看数据实际上正在被压缩和写入,事实就是如此。 但是,行Console.writeLine(inPerson1.name)抛出对象引用未设置异常,因为它似乎没有从zipstream读取任何数据 有没有想过为什么,或者我做错了什么 代码: public void TestZipT

我正在尝试使用
protobuf-net
和通过tcp连接发送序列化的压缩数据
GzipStream

从zipstream进行的反序列化或读取只是阻塞,不会完成

为了测试它,我选择尝试使用一个更简单的
FileStream
,以查看数据实际上正在被压缩和写入,事实就是如此。 但是,行
Console.writeLine(inPerson1.name)
抛出
对象引用未设置异常,因为它似乎没有从zipstream读取任何数据

有没有想过为什么,或者我做错了什么

代码:

public void TestZipToFile(){
var person1=新人{id=1,name=“Pete”};
var person2=新人{id=2,name=“Sarah”};
使用(var file=file.Create(“people.bin”))
{
GZipStream zs=新的GZipStream(文件,CompressionMode.Compress);
Serializer.SerializeWithLengthPrefix(zs,person1,PrefixStyle.Fixed32);//.Serialize(file,foo);
Serializer.SerializeWithLengthPrefix(zs,person2,PrefixStyle.Fixed32);//.Serialize(file,foo);
}
Person inPerson1=null;
Person inPerson2=null;
使用(var file=file.OpenRead(“people.bin”))
{
GZipStream ozs=新的GZipStream(文件,CompressionMode.Decompress);
inPerson1=Serializer.DeserializeWithLengthPrefix(ozs,PrefixStyle.Fixed32);//.Deserialize(文件);
inPerson2=Serializer.DeserializeWithLengthPrefix(ozs,PrefixStyle.Fixed32);//.Deserialize(文件);
}
Console.WriteLine(inPerson1.name);
Console.WriteLine(inPerson2.name);
}
[原始合同]
公共阶层人士
{
[原成员(1)
公共int id;
[原成员(2)]
公共字符串名称;
}

您从未关闭输出
GZipStream
,因此我怀疑它最终从未向底层流写入任何内容。您应该为每个
GZipStream
以及
FileStream
都有一个
using
语句。是的!我非常感激。谢谢。
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;
}