public ByteSegmentRef internalRead() {

      int nextValueLength;

      if (readIndex == 0) {
        if (isSingleRow) {
          isNextEof = true;
          nextAbsoluteValueOffset = -1;
        } else {

          // Read the next relative offset the last inserted value record.
          final long referenceAbsoluteOffset =
              absoluteOffset - KeyRef.AbsoluteOffset.byteLength;
          hashMapStore.writeBuffers.setReadPoint(
              referenceAbsoluteOffset, readPos);
          long relativeNextValueOffset =
              hashMapStore.writeBuffers.readNByteLong(
                  KeyRef.AbsoluteOffset.byteLength, readPos);
          // Preconditions.checkState(relativeNextValueOffset != 0);
          isNextEof = false;

          // Use positive relative offset from first record to last inserted value record.
          nextAbsoluteValueOffset = referenceAbsoluteOffset + relativeNextValueOffset;
        }

        // Position past the key to first value.
        hashMapStore.writeBuffers.setReadPoint(firstValueAbsoluteOffset, readPos);
        nextValueLength = hashMapStore.writeBuffers.readVInt(readPos);
      } else {

        // Position to the next value record.
        // Preconditions.checkState(nextAbsoluteValueOffset >= 0);
        hashMapStore.writeBuffers.setReadPoint(nextAbsoluteValueOffset, readPos);

        // Read the next relative offset.
        long relativeNextValueOffset =
            hashMapStore.writeBuffers.readNByteLong(
                RelativeOffset.byteLength, readPos);
        if (relativeNextValueOffset == 0) {
          isNextEof = true;
          nextAbsoluteValueOffset = -1;
        } else {
          isNextEof = false;

          // The way we insert causes our chain to backwards from the last inserted value record...
          nextAbsoluteValueOffset = nextAbsoluteValueOffset - relativeNextValueOffset;
        }
        nextValueLength = hashMapStore.writeBuffers.readVInt(readPos);

        // Now positioned to the value.
      }

      // Capture a ByteSegmentRef to the current value position and length.
      hashMapStore.writeBuffers.getByteSegmentRefToCurrent(
          byteSegmentRef, nextValueLength, readPos);

      readIndex++;
      return byteSegmentRef;
    }
Setup for a match outright.
@param hashMapStore
@param refWord
ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/fast/VectorMapJoinFastBytesHashMapStore.java