Applitools.Utils.CommonUtils.ReadToEnd C# (CSharp) Method

ReadToEnd() public static method

Returns all the bytes of the input stream.
public static ReadToEnd ( Stream stream, int bufferSize = 1024, int length, long maxLength, Logger logger = null ) : byte[]
stream Stream
bufferSize int
length int
maxLength long
logger Logger
return byte[]
        public static byte[] ReadToEnd(this Stream stream, int bufferSize = 1024, int length = 0, long maxLength = 0,
            Logger logger = null)
        {
            ArgumentGuard.NotNull(stream, nameof(stream));

            using (var ms = length == 0 ? new MemoryStream() : new MemoryStream(length))
            {
                byte[] array = new byte[bufferSize];
                int count;
                long maxPosition = maxLength - bufferSize;
                bool stillReading = true;
                NetworkStream networkStream = stream as NetworkStream;
                logger?.Log(TraceLevel.Debug, Stage.General,
                    new { message = "start reading", streamType = stream.GetType().Name });
                while (stillReading && (networkStream?.DataAvailable ?? true) && (count = stream.Read(array, 0, array.Length)) != 0)
                {
                    if (maxLength > 0 && ms.Position >= maxPosition)
                    {
                        stillReading = false;
                        count = (int)Math.Max(0, maxLength - ms.Position);
                    }
                    ms.Write(array, 0, count);
                }
                byte[] bytes = ms.ToArray();
                logger?.Log(TraceLevel.Debug, Stage.General,
                    new { message = "done reading", streamType = stream.GetType().Name, bytesRead = bytes.Length });

                return bytes;
            }
        }