private void setRecordWithOffset() {
    assert records != null;
    assert recordPositions[position] != null;
    RecordPosition offset = recordPositions[position];
    Preconditions.checkArgument(
        offset.currentInsertFileOffset() >= 0 || offset.currentDeleteFileOffset() >= 0,
        "fileOffset can't be negative");
    Preconditions.checkArgument(
        offset.currentInsertRecordOffset() >= 0, "numberOfRecords can't be negative");
    Preconditions.checkArgument(
        offset.currentDeleteRecordOffset() >= 0, "numberOfRecords can't be negative");
    recordWithOffset.set(
        records[position],
        offset.currentInsertFileOffset(),
        offset.currentInsertRecordOffset(),
        offset.currentDeleteFileOffset(),
        offset.currentDeleteRecordOffset());
  }
{@link RecordsWithSplitIds} is used to pass a batch of records from fetcher to source reader.
Batching is to improve the efficiency for records handover.

<p>{@link RecordsWithSplitIds} interface can encapsulate batches from multiple splits. This is
the case for Kafka source where fetchers can retrieve records from multiple Kafka partitions at
the same time.

<p>For file-based sources like Iceberg, readers always read one split/file at a time. Hence, we
will only have a batch of records for one split here.

<p>This class uses array to store a batch of records from the same file (with the same
fileOffset).
amoro-format-mixed/amoro-mixed-flink/amoro-mixed-flink-common/src/main/java/org/apache/amoro/flink/read/hybrid/reader/ArrayBatchRecords.java