private AlignedPageReader deserializeFromSinglePageChunk() throws IOException {
    PageHeader timePageHeader =
        PageHeader.deserializeFrom(timeChunkDataBuffer, (Statistics<? extends Serializable>) null);
    List<PageHeader> valuePageHeaderList = new ArrayList<>();

    boolean isAllNull = true;
    for (ByteBuffer byteBuffer : valueChunkDataBufferList) {
      if (byteBuffer != null) {
        isAllNull = false;
        valuePageHeaderList.add(
            PageHeader.deserializeFrom(byteBuffer, (Statistics<? extends Serializable>) null));
      } else {
        valuePageHeaderList.add(null);
      }
    }

    if (isAllNull) {
      // when there is only one page in the chunk, the page statistic is the same as the chunk, so
      // we needn't filter the page again
      skipCurrentPage(timePageHeader, valuePageHeaderList);
      return null;
    }
    return constructAlignedPageReader(timePageHeader, valuePageHeaderList);
  }
The {@link AlignedSinglePageWholeChunkReader} is used to read a whole single page aligned chunk
with need to pass in the statistics.
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/parser/scan/AlignedSinglePageWholeChunkReader.java