parquet-column/src/main/java/org/apache/parquet/column/values/ValuesReader.java
public void initFromPage(int valueCount, ByteBufferInputStream in) throws IOException {
    if (actualOffset != -1) {
      throw new UnsupportedOperationException(
          "Either initFromPage(int, ByteBuffer, int) or initFromPage(int, ByteBufferInputStream) must be implemented in "
              + getClass().getName());
    }
    initFromPage(valueCount, in.slice(valueCount), 0);
  }
public void initFromPage(int valueCount, ByteBufferInputStream in) throws IOException {
    if (actualOffset != -1) {
      throw new UnsupportedOperationException(
          "Either initFromPage(int, ByteBuffer, int) or initFromPage(int, ByteBufferInputStream) must be implemented in "
              + getClass().getName());
    }
    initFromPage(valueCount, in.slice(valueCount), 0);
  }
Called to initialize the column reader from a part of a page.

Implementations must consume all bytes from the input stream, leaving the
stream ready to read the next section of data. The underlying
implementation knows how much data to read, so a length is not provided.

Each page may contain several sections:
<ul>
<li> repetition levels column
<li> definition levels column
<li> data column
</ul>

@param valueCount count of values in this page
@param in an input stream containing the page data at the correct offset

@throws IOException if there is an exception while reading from the input stream