public static ArraySegment<byte>[] ReadStream(Stream stream, int segmentSize, out int length)
{
if (stream == null)
{
throw Fx.Exception.ArgumentNull("stream");
}
ArraySegment<byte>[] result;
BufferListStream bufferListStream = stream as BufferListStream;
if (bufferListStream != null)
{
result = bufferListStream.bufferList.ToArray();
length = (int)bufferListStream.length;
}
else
{
length = 0;
List<ArraySegment<byte>> buffers = new List<ArraySegment<byte>>();
while (true)
{
byte[] buffer = new byte[segmentSize];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
if (bytesRead == 0)
{
break;
}
buffers.Add(new ArraySegment<byte>(buffer, 0, bytesRead));
length += bytesRead;
}
result = buffers.ToArray();
}
return result;
}
}