Can you remind me what the currOff+=2 is for? Aren't you just doing this:

    int currOffset = getOffsetFor(elemPosition);
    int elemLength = bytes[currOffset] == SEPARATOR_BYTE ?
        0 : getOffsetFor(elemPosition+1) - currOffset - 1; // Subtract one to ignore separator byte