@Override
    public Object get(long i)
    {
        if (ptr != 0) {
            short objLen = objectLengths.getShort(i);
            if (objLen < 0) return null;
            long offset = sizeof * i * maxObjectLength;
            for (int j = 0; j < objLen; j++) {
                byteArray[j] = Utilities.UNSAFE.getByte(ptr + offset + sizeof * j);
            }
            return fromByteArray(byteArray);
        } else {
            if (isConstant()) {
                return data[0];
            } else {
                return data[(int) i];
            }
        }
    }