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