code: @Override
    public int read(byte[] b, int start, int length) throws IOException {
      if (!readMetaDataIfNeeded()) {
        return -1;
      }
      int toRead = (int)Math.min(length, getCompleteBlockSize() - rawBlockOffset);
      int read = in.read(b, start, toRead);
      if (read >= 0) {
        moveForward(read);
      } else {
        eofReached = true;
      }
      return read;
    }
docs: Note: When at the beginning of a metadata block, reading with length = 0 will
  consume the MetaDataBlock.