@Override
  public int read(byte[] b, int off, int len) throws IOException {
    if (len == 0) return 0;

    if (remainingLimit() <= 0) return -1;
    len = Math.min(len, remainingLimit());
    if (len <= 0) return -1;

    final int actuallyRead = super.read(b, off, len);
    if (actuallyRead >= 0) myBytesRead += actuallyRead;

    return actuallyRead;
  }
@Override
  public int read(byte[] b, int off, int len)