스트림에서 직렬화 된 객체의 양을 가져 오려고합니다. 직렬화 및 비 직렬화에서 시작합니다. 나는 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);
그러나,이 파일의 약 3 직렬화 된 객체가있는 동안, stream.Length
값이 1000 이상이기 때문에 작동하지 않습니다.
나는 BinaryFormatter
을 사용하여 직렬화를 수행합니다.
편집 : 나는 파일에 직렬화 된 개체가 다차원 배열 (int [,])이며 그 (것)들에 저장된 숫자가 있어야한다고 덧붙여 야합니다. 첫 번째 객체에는 숫자 1, 두 번째 객체에는 2 등이 있습니다. 미리 감사드립니다!
직렬화 된 객체의 크기가 가변적 일 수 있으므로 처음 직렬화 될 때 어딘가에 해당 정보를 쓰지 않는 한 모든 객체를 직렬화 해제하지 않은 객체의 수를 결정할 수 없습니다. 그러나 객체가 고정 된 크기 (예 : 문자열이없는 경우)가 있다면 미리 직렬화 된 크기를 알면 해결할 수 있습니다. 객체 당 직렬화 된 크기로 파일 길이를 나눌 수 있습니다. –
내가 어떻게 그럴 수 있니? 그것은 아주 좋은 생각이지만 그것을하는 방법을 잘 모르겠습니다. 개체를 serialize 할 때마다 1 씩 값을 늘리려고 생각했지만 응용 프로그램/프로젝트가 닫히고 나중에 다시 열릴 때 값이 유지됩니다. 편집 : 개체가 고정 크기가 아닙니다. – Fluppe
예, 불행히도 객체가 고정 크기가 아닌 경우 모두를 비 직렬화하고 임의로 선택해야합니다. –