internal static byte[] ToByteArray(Stream stream)
{
Throw.IfNull(nameof(stream), stream);
MemoryStream memStream = stream as MemoryStream;
if (memStream != null)
{
try
{
return memStream.GetBuffer();
}
catch (UnauthorizedAccessException)
{
return memStream.ToArray();
}
}
if (stream.CanSeek)
{
if (stream.Length == 0)
return new byte[0];
CheckLength(stream.Length);
int length = (int)stream.Length;
byte[] result = new byte[length];
int read = 0;
int bytesRead = 0;
while ((bytesRead = stream.Read(result, read, length - read)) != 0)
{
read += bytesRead;
}
return result;
}
int bufferSize = 8192;
using (MemoryStream tmpStream = new MemoryStream())
{
byte[] buffer = new byte[bufferSize];
int length;
while ((length = stream.Read(buffer, 0, bufferSize)) != 0)
{
CheckLength(tmpStream.Length + length);
tmpStream.Write(buffer, 0, length);
}
return tmpStream.ToArray();
}
}
}