public final void rawValueAt(int index, BytePiece bytes) {
        long startAddr, endAddr;
        switch (version) {
            case Version.VERSION_0_ID: {
                if (maxObjLen == 0) {
                    startAddr = 0;
                    endAddr = 0;
                } else {
                    long indexAddr = dataAddr + (index << 3) + 4;
                    int str_offset = (objCount << 3) + 4;
                    startAddr = MemoryUtil.getInt(indexAddr) + dataAddr + str_offset;
                    endAddr = MemoryUtil.getInt(indexAddr + 4) + dataAddr + str_offset;
                }
                break;
            }
            default: {
                long indexAddr = dataAddr + (index << 2);
                int str_offset = (objCount + 1) << 2;
                startAddr = MemoryUtil.getInt(indexAddr) + dataAddr + str_offset;
                endAddr = MemoryUtil.getInt(indexAddr + 4) + dataAddr + str_offset;
                break;
            }
        }

        bytes.base = null;
        bytes.addr = startAddr;
        bytes.len = (int) (endAddr - startAddr);
    }
Note that this method could update the content of dpn.
Make sure to call this method before you actually save the dpn instance to storage.
indexr-segment/src/main/java/io/indexr/segment/pack/DataPack.java