HBASE-15569 Make Bytes.toStringBinary faster

Signed-off-by: stack <stack@apache.org>
This commit is contained in:
Junegunn Choi 2016-03-31 13:20:26 +09:00 committed by stack
parent 7d3a89ce8e
commit ff6a339582
1 changed files with 8 additions and 5 deletions

View File

@ -626,6 +626,10 @@ public class Bytes implements Comparable<Bytes> {
return toStringBinary(toBytes(buf));
}
private static final char[] HEX_CHARS_UPPER = {
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
};
/**
* Write a printable representation of a byte array. Non-printable
* characters are hex escaped in the format \\x%02X, eg:
@ -643,13 +647,12 @@ public class Bytes implements Comparable<Bytes> {
if (off + len > b.length) len = b.length - off;
for (int i = off; i < off + len ; ++i) {
int ch = b[i] & 0xFF;
if ((ch >= '0' && ch <= '9')
|| (ch >= 'A' && ch <= 'Z')
|| (ch >= 'a' && ch <= 'z')
|| " `~!@#$%^&*()-_=+[]{}|;:'\",.<>/?".indexOf(ch) >= 0) {
if (ch >= ' ' && ch <= '~' && ch != '\\') {
result.append((char)ch);
} else {
result.append(String.format("\\x%02X", ch));
result.append("\\x");
result.append(HEX_CHARS_UPPER[ch / 0x10]);
result.append(HEX_CHARS_UPPER[ch % 0x10]);
}
}
return result.toString();