public synchronized int read(byte[] b, int off, int len) throws IOException
public synchronized int read() throws IOException
  public synchronized int read(byte[] b, int off, int len) throws IOException  {    if (off < 0 || len < 0 || off + len > b.length)      throw new ArrayIndexOutOfBoundsException();    if (pos >= count && !refill())      return -1;		// No bytes were read before EOF.    int remain = Math.min(count - pos, len);    System.arraycopy(buf, pos, b, off, remain);    pos += remain;    if (markpos >= 0 && pos - markpos > marklimit)      markpos = -1;    return remain;  }