UUIDUtils.java
package com.alibaba.fastjson2.benchmark.fastcode;
import com.alibaba.fastjson2.util.JDKUtils;
import java.util.UUID;
import static com.alibaba.fastjson2.util.JDKUtils.LATIN1;
import static com.alibaba.fastjson2.util.JDKUtils.UTF16;
public class UUIDUtils {
static final char[] HEX256;
static {
HEX256 = new char[256];
for (int i = 0; i < 256; i++) {
int hi = (i >> 4) & 15;
int lo = i & 15;
HEX256[i] = (char) (((hi < 10 ? '0' + hi : 'a' + hi - 10) << 8)
+ (lo < 10 ? '0' + lo : 'a' + lo - 10));
}
}
public static String fastUUID(UUID uuid) {
long hi = uuid.getMostSignificantBits();
long lo = uuid.getLeastSignificantBits();
final char[] hex256 = UUIDUtils.HEX256;
char i = hex256[((int) (hi >> 56)) & 255];
char i1 = hex256[((int) (hi >> 48)) & 255];
char i2 = hex256[((int) (hi >> 40)) & 255];
char i3 = hex256[((int) (hi >> 32)) & 255];
char i4 = hex256[(((int) hi) >> 24) & 255];
char i5 = hex256[(((int) hi) >> 16) & 255];
char i6 = hex256[(((int) hi) >> 8) & 255];
char i7 = hex256[((int) hi) & 255];
char i8 = hex256[(((int) (lo >> 56))) & 255];
char i9 = hex256[(((int) (lo >> 48))) & 255];
char i10 = hex256[(((int) (lo >> 40))) & 255];
char i11 = hex256[((int) (lo >> 32)) & 255];
char i12 = hex256[(((int) lo) >> 24) & 255];
char i13 = hex256[(((int) lo) >> 16) & 255];
char i14 = hex256[(((int) lo) >> 8) & 255];
char i15 = hex256[((int) lo) & 255];
byte[] bytes = new byte[36];
bytes[0] = (byte) (i >> 8);
bytes[1] = (byte) i;
bytes[2] = (byte) (i1 >> 8);
bytes[3] = (byte) i1;
bytes[4] = (byte) (i2 >> 8);
bytes[5] = (byte) i2;
bytes[6] = (byte) (i3 >> 8);
bytes[7] = (byte) i3;
bytes[8] = '-';
bytes[9] = (byte) (i4 >> 8);
bytes[10] = (byte) i4;
bytes[11] = (byte) (i5 >> 8);
bytes[12] = (byte) i5;
bytes[13] = '-';
bytes[14] = (byte) (i6 >> 8);
bytes[15] = (byte) i6;
bytes[16] = (byte) (i7 >> 8);
bytes[17] = (byte) i7;
bytes[18] = '-';
bytes[19] = (byte) (i8 >> 8);
bytes[20] = (byte) i8;
bytes[21] = (byte) (i9 >> 8);
bytes[22] = (byte) i9;
bytes[23] = '-';
bytes[24] = (byte) (i10 >> 8);
bytes[25] = (byte) i10;
bytes[26] = (byte) (i11 >> 8);
bytes[27] = (byte) i11;
bytes[28] = (byte) (i12 >> 8);
bytes[29] = (byte) i12;
bytes[30] = (byte) (i13 >> 8);
bytes[31] = (byte) i13;
bytes[32] = (byte) (i14 >> 8);
bytes[33] = (byte) i14;
bytes[34] = (byte) (i15 >> 8);
bytes[35] = (byte) i15;
return JDKUtils.STRING_CREATOR_JDK11.apply(bytes, LATIN1);
}
public static String fastUUID2(UUID uuid) {
return fastUUID(uuid.getLeastSignificantBits(), uuid.getMostSignificantBits(), false);
}
static String fastUUID(long lsb, long msb) {
char i = HEX256[((int) (msb >> 56)) & 255];
char i1 = HEX256[((int) (msb >> 48)) & 255];
char i2 = HEX256[((int) (msb >> 40)) & 255];
char i3 = HEX256[((int) (msb >> 32)) & 255];
char i4 = HEX256[(((int) msb) >> 24) & 255];
char i5 = HEX256[(((int) msb) >> 16) & 255];
char i6 = HEX256[(((int) msb) >> 8) & 255];
char i7 = HEX256[((int) msb) & 255];
char i8 = HEX256[(((int) (lsb >> 56))) & 255];
char i9 = HEX256[(((int) (lsb >> 48))) & 255];
char i10 = HEX256[(((int) (lsb >> 40))) & 255];
char i11 = HEX256[((int) (lsb >> 32)) & 255];
char i12 = HEX256[(((int) lsb) >> 24) & 255];
char i13 = HEX256[(((int) lsb) >> 16) & 255];
char i14 = HEX256[(((int) lsb) >> 8) & 255];
char i15 = HEX256[((int) lsb) & 255];
byte[] buf = new byte[36];
buf[0] = (byte) (i >> 8);
buf[1] = (byte) i;
buf[2] = (byte) (i1 >> 8);
buf[3] = (byte) i1;
buf[4] = (byte) (i2 >> 8);
buf[5] = (byte) i2;
buf[6] = (byte) (i3 >> 8);
buf[7] = (byte) i3;
buf[8] = '-';
buf[9] = (byte) (i4 >> 8);
buf[10] = (byte) i4;
buf[11] = (byte) (i5 >> 8);
buf[12] = (byte) i5;
buf[13] = '-';
buf[14] = (byte) (i6 >> 8);
buf[15] = (byte) i6;
buf[16] = (byte) (i7 >> 8);
buf[17] = (byte) i7;
buf[18] = '-';
buf[19] = (byte) (i8 >> 8);
buf[20] = (byte) i8;
buf[21] = (byte) (i9 >> 8);
buf[22] = (byte) i9;
buf[23] = '-';
buf[24] = (byte) (i10 >> 8);
buf[25] = (byte) i10;
buf[26] = (byte) (i11 >> 8);
buf[27] = (byte) i11;
buf[28] = (byte) (i12 >> 8);
buf[29] = (byte) i12;
buf[30] = (byte) (i13 >> 8);
buf[31] = (byte) i13;
buf[32] = (byte) (i14 >> 8);
buf[33] = (byte) i14;
buf[34] = (byte) (i15 >> 8);
buf[35] = (byte) i15;
return new String(buf, LATIN1);
}
static String fastUUID(long lo, long hi, boolean COMPACT_STRINGS) {
final char[] hex256 = UUIDUtils.HEX256;
char i = hex256[((int) (hi >> 56)) & 255];
char i1 = hex256[((int) (hi >> 48)) & 255];
char i2 = hex256[((int) (hi >> 40)) & 255];
char i3 = hex256[((int) (hi >> 32)) & 255];
char i4 = hex256[(((int) hi) >> 24) & 255];
char i5 = hex256[(((int) hi) >> 16) & 255];
char i6 = hex256[(((int) hi) >> 8) & 255];
char i7 = hex256[((int) hi) & 255];
char i8 = hex256[(((int) (lo >> 56))) & 255];
char i9 = hex256[(((int) (lo >> 48))) & 255];
char i10 = hex256[(((int) (lo >> 40))) & 255];
char i11 = hex256[((int) (lo >> 32)) & 255];
char i12 = hex256[(((int) lo) >> 24) & 255];
char i13 = hex256[(((int) lo) >> 16) & 255];
char i14 = hex256[(((int) lo) >> 8) & 255];
char i15 = hex256[((int) lo) & 255];
if (COMPACT_STRINGS) {
byte[] bytes = new byte[36];
bytes[0] = (byte) (i >> 8);
bytes[1] = (byte) i;
bytes[2] = (byte) (i1 >> 8);
bytes[3] = (byte) i1;
bytes[4] = (byte) (i2 >> 8);
bytes[5] = (byte) i2;
bytes[6] = (byte) (i3 >> 8);
bytes[7] = (byte) i3;
bytes[8] = '-';
bytes[9] = (byte) (i4 >> 8);
bytes[10] = (byte) i4;
bytes[11] = (byte) (i5 >> 8);
bytes[12] = (byte) i5;
bytes[13] = '-';
bytes[14] = (byte) (i6 >> 8);
bytes[15] = (byte) i6;
bytes[16] = (byte) (i7 >> 8);
bytes[17] = (byte) i7;
bytes[18] = '-';
bytes[19] = (byte) (i8 >> 8);
bytes[20] = (byte) i8;
bytes[21] = (byte) (i9 >> 8);
bytes[22] = (byte) i9;
bytes[23] = '-';
bytes[24] = (byte) (i10 >> 8);
bytes[25] = (byte) i10;
bytes[26] = (byte) (i11 >> 8);
bytes[27] = (byte) i11;
bytes[28] = (byte) (i12 >> 8);
bytes[29] = (byte) i12;
bytes[30] = (byte) (i13 >> 8);
bytes[31] = (byte) i13;
bytes[32] = (byte) (i14 >> 8);
bytes[33] = (byte) i14;
bytes[34] = (byte) (i15 >> 8);
bytes[35] = (byte) i15;
return JDKUtils.STRING_CREATOR_JDK11.apply(bytes, LATIN1);
} else {
byte[] buf = new byte[72];
putChar(buf, 0, (byte) (i >> 8));
putChar(buf, 1, (byte) i);
putChar(buf, 2, (byte) (i1 >> 8));
putChar(buf, 3, (byte) i1);
putChar(buf, 4, (byte) (i2 >> 8));
putChar(buf, 5, (byte) i2);
putChar(buf, 6, (byte) (i3 >> 8));
putChar(buf, 7, (byte) i3);
putChar(buf, 8, '-');
putChar(buf, 9, (byte) (i4 >> 8));
putChar(buf, 10, (byte) i4);
putChar(buf, 11, (byte) (i5 >> 8));
putChar(buf, 12, (byte) i5);
putChar(buf, 13, '-');
putChar(buf, 14, (byte) (i6 >> 8));
putChar(buf, 15, (byte) i6);
putChar(buf, 16, (byte) (i7 >> 8));
putChar(buf, 17, (byte) i7);
putChar(buf, 18, '-');
putChar(buf, 19, (byte) (i8 >> 8));
putChar(buf, 20, (byte) i8);
putChar(buf, 21, (byte) (i9 >> 8));
putChar(buf, 22, (byte) i9);
putChar(buf, 23, '-');
putChar(buf, 24, (byte) (i10 >> 8));
putChar(buf, 25, (byte) i10);
putChar(buf, 26, (byte) (i11 >> 8));
putChar(buf, 27, (byte) i11);
putChar(buf, 28, (byte) (i12 >> 8));
putChar(buf, 29, (byte) i12);
putChar(buf, 30, (byte) (i13 >> 8));
putChar(buf, 31, (byte) i13);
putChar(buf, 32, (byte) (i14 >> 8));
putChar(buf, 33, (byte) i14);
putChar(buf, 34, (byte) (i15 >> 8));
putChar(buf, 35, (byte) i15);
return JDKUtils.STRING_CREATOR_JDK11.apply(buf, UTF16);
}
}
static final int HI_BYTE_SHIFT = 0;
static final int LO_BYTE_SHIFT = 8;
static void putChar(byte[] val, int index, int c) {
index <<= 1;
val[index] = (byte) (c >> HI_BYTE_SHIFT);
val[index + 1] = (byte) (c >> LO_BYTE_SHIFT);
}
}