我正在尝试在序列化和反序列化的流中获取序列化对象的数量。我想这样做是为了创建一个介于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个,等等。 提前谢谢!
答案 0 :(得分:0)
您可以从未知大小的列表中随机选择一个项目,但是您必须扫描整个列表才能执行此操作。但是,您不必将所有项目保留在内存中以便选择一个。
请参阅我的文章Random Selection from Large Groups,特别是标题"如果我不知道有多少文章会怎么样。"