public int read(char[] c, int off, int len) {if (left > len) {s.getChars(upto, upto+len, c, off);upto += len;left -= len;return len;} else if (0 == left) {return -1;} else {s.getChars(upto, upto+left, c, off);int r = left;left = 0;upto = s.length();return r;}}

public override int Read(char[] c, int off, int len){if (pos < size){len = Math.Min(len, size - pos);s.CopyTo(pos, c, off, pos + len - pos);pos += len;return len;}else{s = null;return -1;}}
