2012-07-01 76 views
0

我試圖用protobuf-netGzipStreamGzipstream通過TCP不解壓

的反序列化送過來一個TCP連接序列化,壓縮數據或從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; 
} 

回答

2

你永遠關閉輸出GZipStream,所以我懷疑它結束從來沒有寫任何東西底層流。您應該爲每個GZipStream以及FileStream提供using聲明。

+0

是的!我非常感激。謝謝。 – Vort3x