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シリアライズを行うために使用しています。

EDIT:ファイルにシリアル化されたオブジェクトは多次元配列(int [、])であり、それらには数値が格納されていることを追加する必要があります。最初のオブジェクトの番号は 1、2 番目のオブジェクトの番号は 2 などです。よろしくお願いします。

4

1 に答える 1

0

サイズが不明なリストからアイテムをランダムに選択できますが、そのためにはリスト全体をスキャンする必要があります。ただし、アイテムを選択するためにすべてのアイテムをメモリに保持する必要はありません。

私の記事Random Selection from Large Groupsを参照してください。特に、「グループの数がわからない場合」という見出しを参照してください。

于 2013-05-20T13:59:00.993 に答える