public byte[] ToArray(long start, long length, int numberZeroBytesPrefix = 0, int numberZeroBytesAppend = 0)
{
if (length > int.MaxValue)
throw new ArgumentOutOfRangeException("length", "Unable to return array whose size is larger than int.MaxValue. Consider requesting multiple smaller arrays.");
lock (streamLocker)
{
if (start + length > _innerStream.Length)
throw new ArgumentOutOfRangeException("length", "Provided start and length parameters reference past the end of the available stream.");
_innerStream.Seek(start, SeekOrigin.Begin);
byte[] returnData = new byte[length + numberZeroBytesPrefix + numberZeroBytesAppend];
_innerStream.Read(returnData, numberZeroBytesPrefix, (int)length);
return returnData;
}
}