Beispiel #1
0
        public DdrPs2FileDataTableChunk GetBound(Stream stream)
        {
            var cache       = new CachedStream(stream);
            var cacheReader = new BinaryReader(cache);

            var entryCount = cacheReader.ReadInt32();
            var offsets    = Enumerable.Range(0, entryCount).Select(x => cacheReader.ReadInt32()).ToArray();
            var lengths    = Enumerable.Range(0, entryCount).Select(x => cacheReader.ReadInt32()).ToArray();
            var entries    = offsets.Select((e, i) => (Offset: e, Length: lengths[i])).OrderBy(x => x.Offset).ToArray();
            var max        = entries.Last().Use(x => x.Length + x.Offset);

            cache.Rewind();
            var snapshot = new SnapshotStream(cache);

            snapshot.TryRead(new byte[max], 0, max);
            return(new DdrPs2FileDataTableChunk
            {
                Data = snapshot.ToArray(),
                HasHeaders = false
            });
        }