2016年8月2日 星期二

【C#】Unable to read beyond the end of the stream

在反序列化 MemoryStream 回物件時碰到
無法讀取資料流末端之外
的錯誤。

MemoryStream stream = new MemoryStream();
var formater = new BinaryFormatter();
FileExpressPack pack = new FileExpressPack
{
 Name = fileName,
 Data = byteData
};
formater.Serialize(stream, pack);

var outPak = formater.Deserialize(stream); // throw exception
stream.Close();

從訊息字面上看不出原因,基本上是序列化完,串流的指標在最後一 index 往外數1,可是反序列化時需要從 0 開始,所以要把指標設回來。
MemoryStream stream = new MemoryStream();
var formater = new BinaryFormatter();
FileExpressPack pack = new FileExpressPack
{
 Name = fileName,
 Data = byteData
};
formater.Serialize(stream, pack);

stream.Seek(0, SeekOrigin.Begin); // add this
var outPak = formater.Deserialize(stream);
stream.Close();

ref: SOF

沒有留言:

張貼留言