public void readBytes(byte[] b, int offset, int len) {assert b.length >= offset + len;final int offsetEnd = offset + len;while (true) {final int blockLeft = blockSize - currentBlockUpto;final int left = offsetEnd - offset;if (blockLeft < left) {System.arraycopy(currentBlock, currentBlockUpto,b, offset,blockLeft);nextBlock();offset += blockLeft;} else {System.arraycopy(currentBlock, currentBlockUpto,b, offset,left);currentBlockUpto += left;break;}}}

public override void ReadBytes(byte[] b, int offset, int len){Debug.Assert(b.Length >= offset + len);int offsetEnd = offset + len;while (true){int blockLeft = outerInstance.blockSize - currentBlockUpto;int left = offsetEnd - offset;if (blockLeft < left){System.Buffer.BlockCopy(currentBlock, currentBlockUpto, b, offset, blockLeft);NextBlock();offset += blockLeft;}else{System.Buffer.BlockCopy(currentBlock, currentBlockUpto, b, offset, left);currentBlockUpto += left;break;}}}
