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 Stream AsStream() { var fs = _bsa._streamFactory(); fs.Seek((long)_offset, SeekOrigin.Begin); uint len = Compressed ? _size : _realSize; if (!Compressed) { return(new FramedStream(fs, fs.Position + len)); } else { return(new FramedStream( new InflaterInputStream(fs) { IsStreamOwner = true }, _realSize)); } }