2013-05-20 24 views
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等。 在此先感谢!

+1

序列化对象的大小可能是可变的,所以不可能确定有多少个没有反序列化它们,除非在第一次序列化时将它们写入某处。但是,如果对象的大小是固定的(例如没有字符串),那么如果事先知道它们的序列化大小,则可以解决它 - 然后可以按每个对象的序列化大小来分割文件长度。 –

+0

我怎么能做到这一点?这是一个非常好的主意,但我不确定如何去做。每当一个对象被序列化时,我正在考虑将值增加1,但是当应用程序/项目关闭并稍后再次打开时,值应该保持不变。 编辑:对象不是固定大小。 – Fluppe

+0

是的,不幸的是,如果对象不是固定的大小,那么你将不得不反序列化它们并随机选择一个。 –

回答

0

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

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

相关问题