获取流中的序列化对象数量以随机选择一个

时间:2013-05-20 12:26:13

标签: c# serialization stream binaryformatter

我正在尝试在序列化和反序列化的流中获取序列化对象的数量。我想这样做是为了创建一个介于1和该数量之间的随机值。

这可能吗?怎么做?

目前我的代码是:

Random rnd = new Random();
Stream stream = new FileStream("File.dat", FileMode.Open, FileAccess.Read, FileShare.Read);
int randomNumber = rnd.Next(1, (int)stream.Length);

但是,这不起作用,因为stream.Length值超过1000,而文件中大约有3个序列化对象。

我正在使用BinaryFormatter进行序列化。

编辑:我应该补充说,序列化到文件的对象是多维数组(int [,]),并且它们有一个存储的数字。第一个对象有1号,第二个有2个,等等。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

您可以从未知大小的列表中随机选择一个项目,但是您必须扫描整个列表才能执行此操作。但是,您不必将所有项目保留在内存中以便选择一个。

请参阅我的文章Random Selection from Large Groups,特别是标题"如果我不知道有多少文章会怎么样。"