public static Value fromBytes(byte[] data) { Objects.requireNonNull(data, "data must not be null!"); if(data.length != 16) { throw new IllegalArgumentException("data must be 16 bytes in length!"); } long mostSignificantBits = 0; long leastSignificantBits = 0; for (int i=0; i<8; i++) { mostSignificantBits = (mostSignificantBits << 8) | (data[i] & 0xff); } for (int i=8; i<16; i++) { leastSignificantBits = (leastSignificantBits << 8) | (data[i] & 0xff); } return new Value(mostSignificantBits, leastSignificantBits); }
public static Value fromBytes(byte[] data) { Objects.requireNonNull(data, "data must not be null!"); if(data.length != 16) { throw new IllegalArgumentException("data must be 16 bytes in length!"); } long mostSignificantBits = 0; long leastSignificantBits = 0; for (int i=0; i<8; i++) { mostSignificantBits = (mostSignificantBits << 8) | (data[i] & 0xff); } for (int i=8; i<16; i++) { leastSignificantBits = (leastSignificantBits << 8) | (data[i] & 0xff); } return new Value(mostSignificantBits, leastSignificantBits); }
static Value internalNextValue(long timestamp, Random random) { checkTimestamp(timestamp); // could use nextBytes(byte[] bytes) instead long mostSignificantBits = random.nextLong(); long leastSignificantBits = random.nextLong(); mostSignificantBits &= 0xFFFF; mostSignificantBits |= (timestamp << 16); return new Value(mostSignificantBits, leastSignificantBits); }
public static Value parseULID(String ulidString) { Objects.requireNonNull(ulidString, "ulidString must not be null!"); if(ulidString.length() != 26) { throw new IllegalArgumentException("ulidString must be exactly 26 chars long."); } String timeString = ulidString.substring(0, 10); long time = internalParseCrockford(timeString); if ((time & TIMESTAMP_OVERFLOW_MASK) != 0) { throw new IllegalArgumentException("ulidString must not exceed '7ZZZZZZZZZZZZZZZZZZZZZZZZZ'!"); } String part1String = ulidString.substring(10, 18); String part2String = ulidString.substring(18); long part1 = internalParseCrockford(part1String); long part2 = internalParseCrockford(part2String); long most = (time << 16) | (part1 >>> 24); long least = part2 | (part1 << 40); return new Value(most, least); }
public static Value parseULID(String ulidString) { Objects.requireNonNull(ulidString, "ulidString must not be null!"); if(ulidString.length() != 26) { throw new IllegalArgumentException("ulidString must be exactly 26 chars long."); } String timeString = ulidString.substring(0, 10); long time = internalParseCrockford(timeString); if ((time & TIMESTAMP_OVERFLOW_MASK) != 0) { throw new IllegalArgumentException("ulidString must not exceed '7ZZZZZZZZZZZZZZZZZZZZZZZZZ'!"); } String part1String = ulidString.substring(10, 18); String part2String = ulidString.substring(18); long part1 = internalParseCrockford(part1String); long part2 = internalParseCrockford(part2String); long most = (time << 16) | (part1 >>> 24); long least = part2 | (part1 << 40); return new Value(most, least); }
static Value internalNextValue(long timestamp, Random random) { checkTimestamp(timestamp); // could use nextBytes(byte[] bytes) instead long mostSignificantBits = random.nextLong(); long leastSignificantBits = random.nextLong(); mostSignificantBits &= 0xFFFF; mostSignificantBits |= (timestamp << 16); return new Value(mostSignificantBits, leastSignificantBits); }