我有一个大约500百万项的列表。如果我序列化单个项而不是列表,我可以使用protobuf-net文件将其序列化到文件中--我无法将项目收集到Price列表中然后进行序列化,因为我会耗尽内存。因此,我必须一次序列化一条记录:
using (var input = File.OpenText("..."))
using (var output = new FileStream("...", FileMode.Create, FileAccess.Write))
{
string line = "";
while ((line = input.ReadLine()) != null)
{
Price price = new Price();
(code that parses input into a Price record)
Serializer.Serialize(output, price);
}
}
我的问题是关于反序列化部分的。看起来Deserialize方法不会把流的位置移动到下一条记录。我尝试了:
using (var input = new FileStream("...", FileMode.Open, FileAccess.Read))
{
Price price = null;
while ((price = Serializer.Deserialize<Price>(input)) != null)
{
}
}
我看到一个真实的价格记录,而其余记录都是空记录 -- 我收到了Price对象,但所有字段都被初始化为默认值。
如何正确反序列化包含未作为列表序列化的对象列表的流?