public ReadingCollectionDto Read()
        {
            ReadingCollectionDto dto = new ReadingCollectionDto();

            dto.Dao = this;

            SeekPosition();

            // Maximum size
            dto.MaxReadings = this.maxSize = Reader.ReadInt32();

            // Record the position of the current size field
            this.currentSizePosition = Reader.BaseStream.Position;

            // Current size
            this.currentSize = Reader.ReadInt32();

            int counter = 0;

            // Read all of the non-empty readings
            for (; counter < this.currentSize; counter++)
            {
                BinaryFileReadingDao newReadingDao = new BinaryFileReadingDao(archive);
                ReadingDto           newReadingDto = newReadingDao.Read();
                newReadingDto.Dao = (IReadingDao)newReadingDao;
                this.readings.Add(newReadingDao);
                dto.Add(newReadingDto);
            }

            // Read all of the empty readings
            for (; counter < this.maxSize; counter++)
            {
                BinaryFileReadingDao newReadingDao = new BinaryFileReadingDao(archive);
                ReadingDto           newReadingDto = newReadingDao.Read();
                Debug.Assert(newReadingDto.Empty);
                newReadingDto.Dao = (IReadingDao)newReadingDao;
                this.unallocatedReadings.Add(newReadingDao);
            }

            return(dto);
        }