0

我试图在我正在序列化和反序列化的流中获取序列化对象的数量。我想这样做以创建一个介于 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,依此类推。提前致谢!

4

1 回答 1

0

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

请参阅我的文章Random Selection from Large Groups,尤其是标题“如果我不知道有多少人怎么办”。

于 2013-05-20T13:59:00.993 回答