示例#1
0
        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);
            }
        }
示例#2
0
        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));
            }
        }