public override int Read(byte[] b, int off, int len) {
if (b == null) {
throw new ArgumentNullException();
} else if ((off < 0) || (off > b.Length) || (len < 0) ||
((off + len) > b.Length) || ((off + len) < 0)) {
throw new ArgumentOutOfRangeException();
} else if (len == 0) {
return 0;
}
if (rangePosition >= length) {
Close();
return -1;
}
int elen = Math.Min(len, length - rangePosition);
raf.ReadFully(b, off, elen);
rangePosition += elen;
return elen;
}