public SubStream(Stream baseStream, long offset, long length)
        {
            ArgGuard.ThrowIfNull(baseStream, nameof(baseStream));
            ArgGuard.ThrowIfFalse(baseStream.CanRead, nameof(baseStream));
            ArgGuard.ThrowIfFalse(baseStream.CanSeek, nameof(baseStream));
            ArgGuard.ThrowIfFalse(offset >= 0, nameof(offset));

            _baseStream = baseStream;
            _position   = 0;
            _offset     = offset;
            _length     = length;

            baseStream.Seek(offset, SeekOrigin.Current);
        }