public void addString(Object preBase, long preOffset, int preLen,
                              Object subBase, long subOffset, int subLen,
                              OffheapBytes pointer) {
            assert nextId < count;

            int start = lastEnd;
            int end = start + preLen + subLen;
            MemoryUtil.setInt(dataAddr + (nextId << 2), start);
            //MemoryUtil.setInt(dataAddr + ((nextId + 1) << 2), end);

            MemoryUtil.copyMemory(preBase, preOffset, null, dataAddr + totalIndexLen + start, preLen);
            MemoryUtil.copyMemory(subBase, subOffset, null, dataAddr + totalIndexLen + start + preLen, subLen);

            nextId++;
            lastEnd = end;

            pointer.set(dataAddr + totalIndexLen + start, preLen + subLen);
        }
A class help explain the string values' strcuture in an offheap byte array.

| offset0 | offset1 | offset2 | offset3(str_total_len) | s0 | s1 | s2 |
| <-                   index(int)                   -> |<- str_data ->|
indexr-common/src/main/java/io/indexr/data/StringsStruct.java