code: public int forEachByte(int index, int length, ByteProcessor visitor) throws Exception {
          if (isOutOfBounds(index, length, length())) {
              throw new IndexOutOfBoundsException("expected: " + "0 <= index(" + index + ") <= start + length(" + length
                      + ") <= " + "length(" + length() + ')');
          }
          return forEachByte0(index, length, visitor);
      }
docs: Iterates over the specified area of this buffer with the specified {@code processor} in ascending order.
  (i.e. {@code index}, {@code (index + 1)},  .. {@code (index + length - 1)}).
  
  @return {@code -1} if the processor iterated to or beyond the end of the specified area.
  The last-visited index If the {@link ByteProcessor#process(byte)} returned {@code false}.