我想問一下使用二進制格式化程序的序列化/反序列化對象。以及我試圖反序列化FileStream中包含許多對象已逐個序列化的對象。一個對象的大小太大,無法保存在進程內存中,這就是爲什麼我不把所有對象都打包在一個對象中的原因,例如:List,因爲它們在進程內存中過大所以我多次按需要序列化。以這種方式,它不會佔用很多進程內存,因爲我只交替處理一個對象而不是所有的對象。看看素描,我的意思是二進制格式化程序,設置反序列化特定對象的位置
<FileStream>
----Object 1-----Size = 100 Mb------index = 0
----Object 2-----Size = 100 Mb------index = 1
----Object 3-----Size = 100 Mb------index = 2
----Object 4-----Size = 100 Mb------index = 3
----Object 5-----Size = 100 Mb------index = 4
----Object 6-----Size = 100 Mb------index = 5
</FileStream>
序列化對象也成功了現在我得到了一個問題來反序列化一個對象。 這裏是問題: 在列表我們可以帶索引的項目。所以如果我們想借此第五索引,我們可以稱之爲比如:
List<object> list = new List<object>();
list(0) = "object1";
list(1) = "object2";
list(2) = "object3";
list(3) = "object4";
list(4) = "object5";
list(5) = "object6";
object fifthIndex = list[5]; // here we can get item based index
那麼現在的問題是我怎麼可以得到第五索引對象就像在六個反序列化對象列表方法在FILESTREAM與二進制格式化程序。我知道在FileStream中有一個名爲「FileStream.Position」的屬性,但它不喜歡索引,它看起來像一個隨機數,當我反序列化/序列化一個對象。也許它會增加隨機數。
其實我已經成功的,但我敢肯定,這是不是最好的方式來看看我的代碼,我曾經嘗試過:
object GetObjectStream(FileStream fs, int index)
{
if (fs != null)
{
BinaryFormatter binaryformatter = new BinaryFormatter();
bool isFinished = false; int count = 0;
while (isFinished == false)
{
try
{
object objectdeserialized = binaryformatter.Deserialize(fs);
if (count == index) return objectdeserialized;
count++;
}
catch
{
isFinished = true;
return null;
}
}
}
return null;
}
這些代碼將「的foreach」每個對象已經序列化,然後反序列化每個對象。我敢打賭,我的代碼並不是最好的方式,因爲反序列化包含100 MB的對象可能需要很長時間,我甚至不知道除了索引以外的對象是否會被反序列化?我想要的方法就像「序列化飛躍」。
如果我們能解決這個問題,你的回答對我非常有幫助和有用。前
謝謝..
顯示它是序列化列表的代碼。 –
,我的意思是序列化@DarinDimitrov列表對象是: binaryformatter.Serialize(新列表
但是如果列表中有很多項目,它們如何適應內存?我認爲這首先是你的問題 - 因爲名單太龐大,內存不足。 –