예제 #1
0
        public async ValueTask CopyDataTo(Stream output)
        {
            await using var in_file = await _bsa._fileName.OpenRead();

            using var rdr           = new BinaryReader(in_file);
            rdr.BaseStream.Position = _dataOffset;

            if (_bsa.HeaderType == VersionType.SSE)
            {
                if (Compressed)
                {
                    using var r = LZ4Stream.Decode(rdr.BaseStream);
                    await r.CopyToLimitAsync(output, (int)_originalSize);
                }
                else
                {
                    await rdr.BaseStream.CopyToLimitAsync(output, (int)_onDiskSize);
                }
            }
            else
            {
                if (Compressed)
                {
                    await using var z = new InflaterInputStream(rdr.BaseStream);
                    await z.CopyToLimitAsync(output, (int)_originalSize);
                }
                else
                {
                    await rdr.BaseStream.CopyToLimitAsync(output, (int)_onDiskSize);
                }
            }
        }