0

protobuf-netおよび を使用してtcp接続を介してシリアル化された圧縮データを送信しようとしていますGzipStream

zipstreamからの逆シリアル化または読み取りは、ブロックするだけで完了しません。

それをテストするために、私はFileStreamデータが実際に圧縮されて書き込まれていることを確認するために、より単純なものを使用することを選択しました。ただし、zipストリームからデータを読み取っていないように見えるため、この行Console.writeLine(inPerson1.name)はをスローします。Object reference not set exception

なぜ、または私が間違っていることについて何か考えはありますか?

コード:

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;
}
4

1 に答える 1

2

出力GZipStreamを閉じることは決してないので、基になるストリームに何も書き込まないことになります。と同様に、usingそれぞれのステートメントが必要です。GZipStreamFileStream

于 2012-07-01T18:55:14.700 に答える