public int Read(byte[] b, int off, int len)
{
if (len == 0)
return 0;
int n = 0;
if (isBack) {
isBack = false;
if (len == 1) {
b[off] = back;
return 1;
}
else {
n = 1;
b[off++] = back;
--len;
}
}
if (arrayIn == null) {
return rf.Read(b, off, len) + n;
}
else {
if (arrayInPtr >= arrayIn.Length)
return -1;
if (arrayInPtr + len > arrayIn.Length)
len = (int)(arrayIn.Length - arrayInPtr);
Array.Copy(arrayIn, arrayInPtr, b, off, len);
arrayInPtr += len;
return len + n;
}
}