< Summary

Information
Class: System.IO.Compression.GZipStream
Assembly: System.IO.Compression
File(s): D:\runner\runtime\src\libraries\System.IO.Compression\src\System\IO\Compression\GZipStream.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 145
Coverable lines: 145
Total lines: 272
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 24
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.ctor(...)100%110%
.ctor(...)100%110%
.ctor(...)100%110%
.ctor(...)100%110%
.ctor(...)100%110%
Flush()100%110%
Seek(...)100%110%
SetLength(...)100%110%
ReadByte()100%110%
BeginRead(...)100%110%
EndRead(...)100%110%
Read(...)100%110%
Read(...)0%220%
BeginWrite(...)100%110%
EndWrite(...)100%110%
Write(...)100%110%
WriteByte(...)0%220%
Write(...)0%220%
CopyTo(...)100%110%
Dispose(...)0%440%
DisposeAsync()0%440%
ReadAsync(...)100%110%
ReadAsync(...)0%220%
WriteAsync(...)100%110%
WriteAsync(...)0%220%
FlushAsync(...)100%110%
CopyToAsync(...)100%110%
CheckDeflateStream()100%110%

File(s)

D:\runner\runtime\src\libraries\System.IO.Compression\src\System\IO\Compression\GZipStream.cs

#LineLine coverage
 1// Licensed to the .NET Foundation under one or more agreements.
 2// The .NET Foundation licenses this file to you under the MIT license.
 3
 4using System.Runtime.CompilerServices;
 5using System.Runtime.InteropServices;
 6using System.Threading;
 7using System.Threading.Tasks;
 8
 9namespace System.IO.Compression
 10{
 11    public class GZipStream : Stream
 12    {
 13        private DeflateStream _deflateStream;
 14
 015        public GZipStream(Stream stream, CompressionMode mode) : this(stream, mode, leaveOpen: false)
 016        {
 017        }
 18
 019        public GZipStream(Stream stream, CompressionMode mode, bool leaveOpen)
 020        {
 021            _deflateStream = new DeflateStream(stream, mode, leaveOpen, ZLibNative.GZip_DefaultWindowBits);
 022        }
 23
 24        // Implies mode = Compress
 025        public GZipStream(Stream stream, CompressionLevel compressionLevel) : this(stream, compressionLevel, leaveOpen: 
 026        {
 027        }
 28
 29        // Implies mode = Compress
 030        public GZipStream(Stream stream, CompressionLevel compressionLevel, bool leaveOpen)
 031        {
 032            _deflateStream = new DeflateStream(stream, compressionLevel, leaveOpen, ZLibNative.GZip_DefaultWindowBits);
 033        }
 34
 35        /// <summary>
 36        /// Initializes a new instance of the <see cref="GZipStream"/> class by using the specified stream, compression 
 37        /// </summary>
 38        /// <param name="stream">The stream to which compressed data is written.</param>
 39        /// <param name="compressionOptions">The options for fine tuning the compression stream.</param>
 40        /// <param name="leaveOpen"><see langword="true" /> to leave the stream object open after disposing the <see cre
 41        /// <exception cref="ArgumentNullException"><paramref name="stream"/> or <paramref name="compressionOptions"/> i
 042        public GZipStream(Stream stream, ZLibCompressionOptions compressionOptions, bool leaveOpen = false)
 043        {
 044            ArgumentNullException.ThrowIfNull(stream);
 045            ArgumentNullException.ThrowIfNull(compressionOptions);
 46
 047            int windowBits = CompressionFormatHelper.ResolveWindowBits(compressionOptions.WindowLog2, CompressionFormat.
 48
 049            _deflateStream = new DeflateStream(stream, compressionOptions, leaveOpen, windowBits);
 050        }
 51
 052        public override bool CanRead => _deflateStream?.CanRead ?? false;
 53
 054        public override bool CanWrite => _deflateStream?.CanWrite ?? false;
 55
 056        public override bool CanSeek => _deflateStream?.CanSeek ?? false;
 57
 58        public override long Length
 59        {
 060            get { throw new NotSupportedException(SR.NotSupported); }
 61        }
 62
 63        public override long Position
 64        {
 065            get { throw new NotSupportedException(SR.NotSupported); }
 066            set { throw new NotSupportedException(SR.NotSupported); }
 67        }
 68
 69        public override void Flush()
 070        {
 071            CheckDeflateStream();
 072            _deflateStream.Flush();
 073        }
 74
 75        public override long Seek(long offset, SeekOrigin origin)
 076        {
 077            throw new NotSupportedException(SR.NotSupported);
 78        }
 79
 80        public override void SetLength(long value)
 081        {
 082            throw new NotSupportedException(SR.NotSupported);
 83        }
 84
 85        public override int ReadByte()
 086        {
 087            CheckDeflateStream();
 088            return _deflateStream.ReadByte();
 089        }
 90
 91        public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback? asyncCallback, objec
 092            TaskToAsyncResult.Begin(ReadAsync(buffer, offset, count, CancellationToken.None), asyncCallback, asyncState)
 93
 94        public override int EndRead(IAsyncResult asyncResult) =>
 095            _deflateStream.EndRead(asyncResult);
 96
 97        public override int Read(byte[] buffer, int offset, int count)
 098        {
 099            CheckDeflateStream();
 0100            return _deflateStream.Read(buffer, offset, count);
 0101        }
 102
 103        public override int Read(Span<byte> buffer)
 0104        {
 0105            if (GetType() != typeof(GZipStream))
 0106            {
 107                // GZipStream is not sealed, and a derived type may have overridden Read(byte[], int, int) prior
 108                // to this Read(Span<byte>) overload being introduced.  In that case, this Read(Span<byte>) overload
 109                // should use the behavior of Read(byte[],int,int) overload.
 0110                return base.Read(buffer);
 111            }
 112            else
 0113            {
 0114                CheckDeflateStream();
 0115                return _deflateStream.ReadCore(buffer);
 116            }
 0117        }
 118
 119        public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback? asyncCallback, obje
 0120            TaskToAsyncResult.Begin(WriteAsync(buffer, offset, count, CancellationToken.None), asyncCallback, asyncState
 121
 122        public override void EndWrite(IAsyncResult asyncResult) =>
 0123            _deflateStream.EndWrite(asyncResult);
 124
 125        public override void Write(byte[] buffer, int offset, int count)
 0126        {
 0127            CheckDeflateStream();
 0128            _deflateStream.Write(buffer, offset, count);
 0129        }
 130
 131        public override void WriteByte(byte value)
 0132        {
 0133            if (GetType() != typeof(GZipStream))
 0134            {
 135                // GZipStream is not sealed, and a derived type may have overridden Write(byte[], int, int) prior
 136                // to this WriteByte override being introduced.  In that case, this WriteByte override
 137                // should use the behavior of the Write(byte[],int,int) overload.
 0138                base.WriteByte(value);
 0139            }
 140            else
 0141            {
 0142                CheckDeflateStream();
 0143                _deflateStream.WriteCore(new ReadOnlySpan<byte>(in value));
 0144            }
 0145        }
 146
 147        public override void Write(ReadOnlySpan<byte> buffer)
 0148        {
 0149            if (GetType() != typeof(GZipStream))
 0150            {
 151                // GZipStream is not sealed, and a derived type may have overridden Write(byte[], int, int) prior
 152                // to this Write(ReadOnlySpan<byte>) overload being introduced.  In that case, this Write(ReadOnlySpan<b
 153                // should use the behavior of Write(byte[],int,int) overload.
 0154                base.Write(buffer);
 0155            }
 156            else
 0157            {
 0158                CheckDeflateStream();
 0159                _deflateStream.WriteCore(buffer);
 0160            }
 0161        }
 162
 163        public override void CopyTo(Stream destination, int bufferSize)
 0164        {
 0165            CheckDeflateStream();
 0166            _deflateStream.CopyTo(destination, bufferSize);
 0167        }
 168
 169        protected override void Dispose(bool disposing)
 0170        {
 171            try
 0172            {
 0173                if (disposing && _deflateStream != null)
 0174                {
 0175                    _deflateStream.Dispose();
 0176                }
 0177                _deflateStream = null!;
 0178            }
 179            finally
 0180            {
 0181                base.Dispose(disposing);
 0182            }
 0183        }
 184
 185        public override ValueTask DisposeAsync()
 0186        {
 0187            if (GetType() != typeof(GZipStream))
 0188            {
 0189                return base.DisposeAsync();
 190            }
 191
 0192            DeflateStream? ds = _deflateStream;
 0193            if (ds != null)
 0194            {
 0195                _deflateStream = null!;
 0196                return ds.DisposeAsync();
 197            }
 198
 0199            return default;
 0200        }
 201
 202        public Stream BaseStream
 203        {
 204            get
 0205            {
 0206                CheckDeflateStream();
 0207                return _deflateStream.BaseStream;
 0208            }
 209        }
 210
 211        public override Task<int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
 0212        {
 0213            CheckDeflateStream();
 0214            return _deflateStream.ReadAsync(buffer, offset, count, cancellationToken);
 0215        }
 216
 217        public override ValueTask<int> ReadAsync(Memory<byte> buffer, CancellationToken cancellationToken = default(Canc
 0218        {
 0219            if (GetType() != typeof(GZipStream))
 0220            {
 221                // GZipStream is not sealed, and a derived type may have overridden ReadAsync(byte[], int, int) prior
 222                // to this ReadAsync(Memory<byte>) overload being introduced.  In that case, this ReadAsync(Memory<byte>
 223                // should use the behavior of ReadAsync(byte[],int,int) overload.
 0224                return base.ReadAsync(buffer, cancellationToken);
 225            }
 226            else
 0227            {
 0228                CheckDeflateStream();
 0229                return _deflateStream.ReadAsyncMemory(buffer, cancellationToken);
 230            }
 0231        }
 232
 233        public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
 0234        {
 0235            CheckDeflateStream();
 0236            return _deflateStream.WriteAsync(buffer, offset, count, cancellationToken);
 0237        }
 238
 239        public override ValueTask WriteAsync(ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken = default(
 0240        {
 0241            if (GetType() != typeof(GZipStream))
 0242            {
 243                // GZipStream is not sealed, and a derived type may have overridden WriteAsync(byte[], int, int) prior
 244                // to this WriteAsync(ReadOnlyMemory<byte>) overload being introduced.  In that case, this
 245                // WriteAsync(ReadOnlyMemory<byte>) overload should use the behavior of Write(byte[],int,int) overload.
 0246                return base.WriteAsync(buffer, cancellationToken);
 247            }
 248            else
 0249            {
 0250                CheckDeflateStream();
 0251                return _deflateStream.WriteAsyncMemory(buffer, cancellationToken);
 252            }
 0253        }
 254
 255        public override Task FlushAsync(CancellationToken cancellationToken)
 0256        {
 0257            CheckDeflateStream();
 0258            return _deflateStream.FlushAsync(cancellationToken);
 0259        }
 260
 261        public override Task CopyToAsync(Stream destination, int bufferSize, CancellationToken cancellationToken)
 0262        {
 0263            CheckDeflateStream();
 0264            return _deflateStream.CopyToAsync(destination, bufferSize, cancellationToken);
 0265        }
 266
 267        private void CheckDeflateStream()
 0268        {
 0269            ObjectDisposedException.ThrowIf(_deflateStream is null, this);
 0270        }
 271    }
 272}

Methods/Properties

.ctor(System.IO.Stream,System.IO.Compression.CompressionMode)
.ctor(System.IO.Stream,System.IO.Compression.CompressionMode,System.Boolean)
.ctor(System.IO.Stream,System.IO.Compression.CompressionLevel)
.ctor(System.IO.Stream,System.IO.Compression.CompressionLevel,System.Boolean)
.ctor(System.IO.Stream,System.IO.Compression.ZLibCompressionOptions,System.Boolean)
CanRead()
CanWrite()
CanSeek()
Length()
Position()
Position(System.Int64)
Flush()
Seek(System.Int64,System.IO.SeekOrigin)
SetLength(System.Int64)
ReadByte()
BeginRead(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object)
EndRead(System.IAsyncResult)
Read(System.Byte[],System.Int32,System.Int32)
Read(System.Span`1<System.Byte>)
BeginWrite(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object)
EndWrite(System.IAsyncResult)
Write(System.Byte[],System.Int32,System.Int32)
WriteByte(System.Byte)
Write(System.ReadOnlySpan`1<System.Byte>)
CopyTo(System.IO.Stream,System.Int32)
Dispose(System.Boolean)
DisposeAsync()
BaseStream()
ReadAsync(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken)
ReadAsync(System.Memory`1<System.Byte>,System.Threading.CancellationToken)
WriteAsync(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken)
WriteAsync(System.ReadOnlyMemory`1<System.Byte>,System.Threading.CancellationToken)
FlushAsync(System.Threading.CancellationToken)
CopyToAsync(System.IO.Stream,System.Int32,System.Threading.CancellationToken)
CheckDeflateStream()