in dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/NameCache.java [38:167]
static String name(byte[] buf, int from, int length, Charset charset) {
long nameValue0 = -1, nameValue1 = -1;
switch (length) {
case 1:
nameValue0 = buf[from];
break;
case 2:
nameValue0 = (buf[from + 1] << 8) + (buf[from] & 0xFF);
break;
case 3:
nameValue0 = (buf[from + 2] << 16) + ((buf[from + 1] & 0xFF) << 8) + (buf[from] & 0xFF);
break;
case 4:
nameValue0 = (buf[from + 3] << 24) + ((buf[from + 2] & 0xFF) << 16) + ((buf[from + 1] & 0xFF) << 8)
+ (buf[from] & 0xFF);
break;
case 5:
nameValue0 = (((long) buf[from + 4]) << 32) + ((buf[from + 3] & 0xFFL) << 24)
+ ((buf[from + 2] & 0xFFL) << 16) + ((buf[from + 1] & 0xFFL) << 8) + (buf[from] & 0xFFL);
break;
case 6:
nameValue0 = (((long) buf[from + 5]) << 40) + ((buf[from + 4] & 0xFFL) << 32)
+ ((buf[from + 3] & 0xFFL) << 24) + ((buf[from + 2] & 0xFFL) << 16)
+ ((buf[from + 1] & 0xFFL) << 8) + (buf[from] & 0xFFL);
break;
case 7:
nameValue0 = (((long) buf[from + 6]) << 48) + ((buf[from + 5] & 0xFFL) << 40)
+ ((buf[from + 4] & 0xFFL) << 32) + ((buf[from + 3] & 0xFFL) << 24)
+ ((buf[from + 2] & 0xFFL) << 16) + ((buf[from + 1] & 0xFFL) << 8) + (buf[from] & 0xFFL);
break;
case 8:
nameValue0 = (((long) buf[from + 7]) << 56) + ((buf[from + 6] & 0xFFL) << 48)
+ ((buf[from + 5] & 0xFFL) << 40) + ((buf[from + 4] & 0xFFL) << 32)
+ ((buf[from + 3] & 0xFFL) << 24) + ((buf[from + 2] & 0xFFL) << 16)
+ ((buf[from + 1] & 0xFFL) << 8) + (buf[from] & 0xFFL);
break;
case 9:
nameValue0 = buf[from];
nameValue1 = (((long) buf[from + 8]) << 56) + ((buf[from + 7] & 0xFFL) << 48)
+ ((buf[from + 6] & 0xFFL) << 40) + ((buf[from + 5] & 0xFFL) << 32)
+ ((buf[from + 4] & 0xFFL) << 24) + ((buf[from + 3] & 0xFFL) << 16)
+ ((buf[from + 2] & 0xFFL) << 8) + (buf[from + 1] & 0xFFL);
break;
case 10:
nameValue0 = (buf[from + 1] << 8) + (buf[from]);
nameValue1 = (((long) buf[from + 9]) << 56) + ((buf[from + 8] & 0xFFL) << 48)
+ ((buf[from + 7] & 0xFFL) << 40) + ((buf[from + 6] & 0xFFL) << 32)
+ ((buf[from + 5] & 0xFFL) << 24) + ((buf[from + 4] & 0xFFL) << 16)
+ ((buf[from + 3] & 0xFFL) << 8) + (buf[from + 2] & 0xFFL);
break;
case 11:
nameValue0 = (buf[from + 2] << 16) + (buf[from + 1] << 8) + (buf[from]);
nameValue1 = (((long) buf[from + 10]) << 56) + ((buf[from + 9] & 0xFFL) << 48)
+ ((buf[from + 8] & 0xFFL) << 40) + ((buf[from + 7] & 0xFFL) << 32)
+ ((buf[from + 6] & 0xFFL) << 24) + ((buf[from + 5] & 0xFFL) << 16)
+ ((buf[from + 4] & 0xFFL) << 8) + (buf[from + 3] & 0xFFL);
break;
case 12:
nameValue0 = (buf[from + 3] << 24) + (buf[from + 2] << 16) + (buf[from + 1] << 8) + (buf[from]);
nameValue1 = (((long) buf[from + 11]) << 56) + ((buf[from + 10] & 0xFFL) << 48)
+ ((buf[from + 9] & 0xFFL) << 40) + ((buf[from + 8] & 0xFFL) << 32)
+ ((buf[from + 7] & 0xFFL) << 24) + ((buf[from + 6] & 0xFFL) << 16)
+ ((buf[from + 5] & 0xFFL) << 8) + (buf[from + 4] & 0xFFL);
break;
case 13:
nameValue0 = (((long) buf[from + 4]) << 32) + (((long) buf[from + 3]) << 24)
+ (((long) buf[from + 2]) << 16) + (((long) buf[from + 1]) << 8) + ((long) buf[from]);
nameValue1 = (((long) buf[from + 12]) << 56) + ((buf[from + 11] & 0xFFL) << 48)
+ ((buf[from + 10] & 0xFFL) << 40) + ((buf[from + 9] & 0xFFL) << 32)
+ ((buf[from + 8] & 0xFFL) << 24) + ((buf[from + 7] & 0xFFL) << 16)
+ ((buf[from + 6] & 0xFFL) << 8) + (buf[from + 5] & 0xFFL);
break;
case 14:
nameValue0 = (((long) buf[from + 5]) << 40) + ((buf[from + 4] & 0xFFL) << 32)
+ ((buf[from + 3] & 0xFFL) << 24) + ((buf[from + 2] & 0xFFL) << 16)
+ ((buf[from + 1] & 0xFFL) << 8) + (buf[from] & 0xFFL);
nameValue1 = (((long) buf[from + 13]) << 56) + ((buf[from + 12] & 0xFFL) << 48)
+ ((buf[from + 11] & 0xFFL) << 40) + ((buf[from + 10] & 0xFFL) << 32)
+ ((buf[from + 9] & 0xFFL) << 24) + ((buf[from + 8] & 0xFFL) << 16)
+ ((buf[from + 7] & 0xFFL) << 8) + (buf[from + 6] & 0xFFL);
break;
case 15:
nameValue0 = (((long) buf[from + 6]) << 48) + ((buf[from + 5] & 0xFFL) << 40)
+ ((buf[from + 4] & 0xFFL) << 32) + ((buf[from + 3] & 0xFFL) << 24)
+ ((buf[from + 2] & 0xFFL) << 16) + ((buf[from + 1] & 0xFFL) << 8) + (buf[from] & 0xFFL);
nameValue1 = (((long) buf[from + 14]) << 56) + ((buf[from + 13] & 0xFFL) << 48)
+ ((buf[from + 12] & 0xFFL) << 40) + ((buf[from + 11] & 0xFFL) << 32)
+ ((buf[from + 10] & 0xFFL) << 24) + ((buf[from + 9] & 0xFFL) << 16)
+ ((buf[from + 8] & 0xFFL) << 8) + (buf[from + 7] & 0xFFL);
break;
case 16:
nameValue0 = (((long) buf[from + 7]) << 56) + ((buf[from + 6] & 0xFFL) << 48)
+ ((buf[from + 5] & 0xFFL) << 40) + ((buf[from + 4] & 0xFFL) << 32)
+ ((buf[from + 3] & 0xFFL) << 24) + ((buf[from + 2] & 0xFFL) << 16)
+ ((buf[from + 1] & 0xFFL) << 8) + (buf[from] & 0xFFL);
nameValue1 = (((long) buf[from + 15]) << 56) + ((buf[from + 14] & 0xFFL) << 48)
+ ((buf[from + 13] & 0xFFL) << 40) + ((buf[from + 12] & 0xFFL) << 32)
+ ((buf[from + 11] & 0xFFL) << 24) + ((buf[from + 10] & 0xFFL) << 16)
+ ((buf[from + 9] & 0xFFL) << 8) + (buf[from + 8] & 0xFFL);
break;
default:
break;
}
if (nameValue0 != -1) {
if (nameValue1 != -1) {
int indexMask = ((int) nameValue1) & (NameCache.NAME_CACHE2.length - 1);
NameCache.NameCacheEntry2 entry = NameCache.NAME_CACHE2[indexMask];
if (entry == null) {
String name = new String(buf, from, length, charset);
NameCache.NAME_CACHE2[indexMask] = new NameCacheEntry2(name, nameValue0, nameValue1);
return name;
} else if (entry.value0 == nameValue0 && entry.value1 == nameValue1) {
return entry.name;
}
} else {
int indexMask = ((int) nameValue0) & (NAME_CACHE.length - 1);
NameCacheEntry entry = NAME_CACHE[indexMask];
if (entry == null) {
String name = new String(buf, from, length, charset);
NAME_CACHE[indexMask] = new NameCacheEntry(name, nameValue0);
return name;
} else if (entry.value == nameValue0) {
return entry.name;
}
}
}
return null;
}