提交 9f4bcf7e 编写于 作者: wu-sheng's avatar wu-sheng

Optimise ID encoding. Only do once for every ID object.

上级 1030ec3a
...@@ -68,7 +68,7 @@ public class ContextCarrier implements Serializable { ...@@ -68,7 +68,7 @@ public class ContextCarrier implements Serializable {
public String serialize() { public String serialize() {
if (this.isValid()) { if (this.isValid()) {
return StringUtil.join('|', return StringUtil.join('|',
this.getTraceSegmentId().toBase64(), this.getTraceSegmentId().encode(),
this.getSpanId() + "", this.getSpanId() + "",
this.getParentApplicationInstanceId() + "", this.getParentApplicationInstanceId() + "",
this.getEntryApplicationInstanceId() + "", this.getEntryApplicationInstanceId() + "",
......
...@@ -27,7 +27,7 @@ public abstract class DistributedTraceId { ...@@ -27,7 +27,7 @@ public abstract class DistributedTraceId {
} }
public String toBase64() { public String toBase64() {
return id.toBase64(); return id.encode();
} }
@Override @Override
......
...@@ -15,29 +15,31 @@ public class ID { ...@@ -15,29 +15,31 @@ public class ID {
private long part1; private long part1;
private long part2; private long part2;
private long part3; private long part3;
private String encoding;
public ID(long part1, long part2, long part3) { public ID(long part1, long part2, long part3) {
this.part1 = part1; this.part1 = part1;
this.part2 = part2; this.part2 = part2;
this.part3 = part3; this.part3 = part3;
this.encoding = null;
} }
public ID(String base64String) { public ID(String encodingString) {
int index = 0; int index = 0;
for (int part = 0; part < 3; part++) { for (int part = 0; part < 3; part++) {
String encodedString; String encodedString;
char potentialTypeChar = base64String.charAt(index); char potentialTypeChar = encodingString.charAt(index);
long value; long value;
if (potentialTypeChar == '#') { if (potentialTypeChar == '#') {
encodedString = base64String.substring(index + 1, index + 5); encodedString = encodingString.substring(index + 1, index + 5);
index += 5; index += 5;
value = ByteBuffer.wrap(DECODER.decode(encodedString)).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer().get(0); value = ByteBuffer.wrap(DECODER.decode(encodedString)).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer().get(0);
} else if (potentialTypeChar == '$') { } else if (potentialTypeChar == '$') {
encodedString = base64String.substring(index + 1, index + 9); encodedString = encodingString.substring(index + 1, index + 9);
index += 9; index += 9;
value = ByteBuffer.wrap(DECODER.decode(encodedString)).order(ByteOrder.LITTLE_ENDIAN).asIntBuffer().get(0); value = ByteBuffer.wrap(DECODER.decode(encodedString)).order(ByteOrder.LITTLE_ENDIAN).asIntBuffer().get(0);
} else { } else {
encodedString = base64String.substring(index, index + 12); encodedString = encodingString.substring(index, index + 12);
index += 12; index += 12;
value = ByteBuffer.wrap(DECODER.decode(encodedString)).order(ByteOrder.LITTLE_ENDIAN).asLongBuffer().get(0); value = ByteBuffer.wrap(DECODER.decode(encodedString)).order(ByteOrder.LITTLE_ENDIAN).asLongBuffer().get(0);
} }
...@@ -53,8 +55,12 @@ public class ID { ...@@ -53,8 +55,12 @@ public class ID {
} }
} }
public String toBase64() { public String encode() {
return long2Base64(part1) + long2Base64(part2) + long2Base64(part3); if (encoding == null) {
encoding = long2Base64(part1) + long2Base64(part2) + long2Base64(part3);
} else {
return encoding;
}
} }
private String long2Base64(long partN) { private String long2Base64(long partN) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册