【发布时间】:2012-01-06 12:35:42
【问题描述】:
我有一个大约 5 亿个项目的列表。如果我序列化单个项目而不是列表,我可以将其序列化为带有 protobuf-net 文件的文件——我无法将这些项目收集到价格列表中然后序列化,因为内存不足。所以,我必须一次序列化一条记录:
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 记录,然后其余的都是空记录——我取回了 Price 对象,但所有字段都初始化为默认值。
如何正确反序列化包含未序列化为列表的对象列表的流?
【问题讨论】:
-
你搞定了吗?您需要更完整的示例吗?
标签: serialization protobuf-net