public void CopyDataTo(Stream output) { var bw = new BinaryWriter(output); WriteHeader(bw); using var fs = _bsa._streamFactory(); using var br = new BinaryReader(fs); foreach (var chunk in _chunks) { var full = new byte[chunk._fullSz]; var isCompressed = chunk._packSz != 0; br.BaseStream.Seek((long)chunk._offset, SeekOrigin.Begin); if (!isCompressed) { br.BaseStream.Read(full, 0, full.Length); } else { byte[] compressed = new byte[chunk._packSz]; br.BaseStream.Read(compressed, 0, compressed.Length); var inflater = new Inflater(); inflater.SetInput(compressed); inflater.Inflate(full); } bw.BaseStream.Write(full, 0, full.Length); } }
public void CopyDataTo(Stream output) { using var fs = _bsa._streamFactory(); fs.Seek((long)_offset, SeekOrigin.Begin); uint len = Compressed ? _size : _realSize; var bytes = new byte[len]; fs.Read(bytes, 0, (int)len); if (!Compressed) { output.Write(bytes, 0, bytes.Length); } else { var uncompressed = new byte[_realSize]; var inflater = new Inflater(); inflater.SetInput(bytes); inflater.Inflate(uncompressed); output.Write(uncompressed, 0, uncompressed.Length); } }