public WriteBuffers getWriteBuffers() {
    return writeBuffers;
  }
A store for a key and a list of 1 or more arbitrary length values in memory.

The memory is a "infinite" byte array as a WriteBuffers object.

We give the client (e.g. hash map logic) a 64-bit key and value reference to keep that has
the offset within the "infinite" byte array of the key.  The 64 bits includes about half
of the upper hash code to help during matching.

We optimize the common case when the key length is short and store that information in the
64 bit reference.

When there are more than 1 value, the zero padding is overwritten with a relative offset to
the next value.  The next value always includes the value length.

Cases:

 1) One element when key and is small (and stored in the reference word):

   Key and Value Reference
     |
     | absoluteOffset
     |
     ---------------------------------
                                      |
                                      v
      &lt;5 0's for Next Relative Offset&gt; &lt;Key Bytes&gt; &lt;Value Length&gt; &lt;Value Bytes&gt;
               NEXT (NONE)                 KEY                        VALUE

NOTE: AbsoluteOffset.byteLength = 5

 2) One element, general: shows optional big key length.

  Key and Value Reference
     |
     | absoluteOffset
     |
     ---------------------------------
                                      |
                                      v
     &lt;5 0's for Next Relative Offset&gt; [Big Key Length] &lt;Key Bytes&gt; &lt;Value Length&gt; &lt;Value Bytes&gt;
               NEXT (NONE)                optional        KEY                        VALUE

 3) Two elements when key length is small and stored in reference word:

   Key and Value Reference
     |
     | absoluteOffset
     |
     ------------------------------------
                                        |
                                        v
     &lt;Next Value Rel Offset as 5 bytes&gt; &lt;Key Bytes&gt; &lt;Value Bytes&gt;
        |     NEXT                         KEY         VALUE
        |
        | first record absolute offset + relative offset
        |
        --------
                |
                v
               &lt;5 0's Padding for Next Value Ref&gt; &lt;Value Length&gt; &lt;Value Bytes&gt;
                    NEXT (NONE)                                     VALUE

 4) Three elements showing how first record updated to point to new value and
    new value points to most recent (additional) value:

   Key and Value Reference
     |
     | absoluteOffset
     |
     ------------------------------------
                                        |
                                        v
     &lt;Next Value Rel Offset as 5 bytes&gt; &lt;Key Bytes&gt; &lt;Value Bytes&gt;
        |     NEXT                         KEY         VALUE
        |
        | first record absolute offset + relative offset
        |
        |
        |      &lt;5 0's Padding for Next Value Ref&gt; &lt;Value Length&gt; &lt;Value Bytes&gt;
        |      ^    NEXT (NONE)                                    VALUE
        |      |
        |      ------
        |            |
        |            | new record absolute offset - (minus) relative offset
        |            |
         -----&gt;&lt;Next Value Rel Offset as 5 bytes&gt; &lt;Value Length&gt; &lt;Value Bytes&gt;
                    NEXT                                            VALUE


  5) Four elements showing how first record is again updated to point to new value and
    new value points to most recent (additional) value:

   Key and Value Reference
     |
     | absoluteOffset
     |
     ------------------------------------
                                        |
                                        v
     &lt;Next Value Rel Offset as 5 bytes&gt; &lt;Key Bytes&gt; &lt;Value Length&gt; &lt;Value Bytes&gt;
        |     NEXT                          KEY                      VALUE
        |
        | first record absolute offset + relative offset
        |
        |
        |      &lt;5 0's Padding for Next Value Ref&gt; &lt;Value Length&gt; &lt;Value Bytes&gt;
        |      ^    NEXT (NONE)                                     VALUE
        |      |
        |      ------
        |            | record absolute offset - (minus) relative offset
        |            |
        |      &lt;Next Value Rel Offset as 5 bytes&gt; &lt;Value Length&gt; &lt;Value Bytes&gt;
        |      ^       NEXT                                         VALUE
        |      |
        |      ------
        |            |
        |            | new record absolute offset - (minus) relative offset
        |            |
         -----&gt;&lt;Next Value Rel Offset as 5 bytes&gt; &lt;Value Length&gt; &lt;Value Bytes&gt;
                       NEXT                                         VALUE


 You get the idea.
ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/fast/VectorMapJoinFastBytesHashMapStore.java