code: public int read(byte b[], int off, int len) {
          if (b == null) throw new NullPointerException("read byte[] == null");
          if (off < 0 || len < 0 || len > b.length - off) throw new IndexOutOfBoundsException();
          if (position >= limit) return -1;
          if (position + len > limit) len = limit - position;
          if (len <= 0) return 0;
          System.arraycopy(data, position, b, off, len);
          position += len;
          return len;
      }
docs: {@inheritDoc}