示例#1
0
        private CtpCommand Inflate(PacketContents mode, long inflatedSize, byte[] payload)
        {
            var rv = new byte[inflatedSize];

            switch (mode)
            {
            case PacketContents.CompressedDeflate:
                using (var ms = new MemoryStream(payload))
                    using (var comp = new DeflateStream(ms, CompressionMode.Decompress, true))
                    {
                        comp.ReadAll(rv, 0, rv.Length);
                    }
                break;

            case PacketContents.CompressedZlib:
                if (m_stream == null)
                {
                    m_stream            = new MemoryStream();
                    m_inflate           = new DeflateStream(m_stream, CompressionMode.Decompress);
                    m_inflate.FlushMode = FlushType.Sync;
                }
                m_stream.Write(payload, 0, payload.Length);
                m_stream.Position = 0;
                m_inflate.Read(rv, 0, rv.Length);
                m_stream.SetLength(0);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(mode), mode, null);
            }

            ReadFromBuffer(out var packet, rv, 0, rv.Length);
            return(packet);
        }
示例#2
0
        private static byte[] Inflate(Stream s, string name)
        {
            InternalErrorException MakeError(Exception e)
            {
                return(new InternalErrorException($"Failed to decompress {name}", e));
            }

            try
            {
                // Eat first two bytes
                // See: http://stackoverflow.com/a/21544269/362938
                s.ReadByte();
                s.ReadByte();

                using var deflateStream = new DeflateStream(s, CompressionMode.Decompress);
                return(deflateStream.ReadAll());
            }
            catch (InvalidDataException e)
            {
                throw MakeError(e);
            }
            catch (IOException e)
            {
                throw MakeError(e);
            }
        }
示例#3
0
文件: ZipUtil.cs 项目: umaim/SteamKit
        private static byte[] InflateBuffer(byte[] compressedBuffer, UInt32 decompressedSize)
        {
            using (MemoryStream ms = new MemoryStream(compressedBuffer))
                using (DeflateStream deflateStream = new DeflateStream(ms, CompressionMode.Decompress))
                {
                    byte[] inflated = new byte[decompressedSize];
                    deflateStream.ReadAll(inflated);

                    return(inflated);
                }
        }
        public ZLibStream(Stream stream, long length = -1)
        {
            this.stream = new DeflateStream(stream, CompressionMode.Decompress, leaveOpen: false);
            this.length = length;

            Span <byte> zlibHeader = stackalloc byte[2];

            stream.ReadAll(zlibHeader);

            if (zlibHeader[0] != 0x78 || (zlibHeader[1] != 0x01 && zlibHeader[1] != 0x9C))
            {
                throw new GitException();
            }
        }
示例#5
0
 public static byte[] Inflate(byte[] compressed)
 {
     using var inputStream   = new MemoryStream(compressed, false);
     using var deflateStream = new DeflateStream(inputStream, CompressionMode.Decompress);
     return(deflateStream.ReadAll());
 }