HBase行键设计中的“字节模式”

时间:2019-01-15 03:35:52

标签: java encoding

来自Hbase rowkey design

我不理解“字节模式”中的示例:

 // hash
//
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] digest = md.digest(Bytes.toBytes(s));
System.out.println("md5 digest bytes length: " + digest.length);    // returns 16

String sDigest = new String(digest);
byte[] sbDigest = Bytes.toBytes(sDigest);
System.out.println("md5 digest as string length: " + sbDigest.length);    // returns 26

为什么sbDigent.length!=摘要长度?

谢谢

1 个答案:

答案 0 :(得分:0)

在我的月食中, “摘要”为0xE807F1FCF82D132F9BB018CA6738A19F,16个字节,因此其长度为16。

“ sbDigest”为0xEFBFBD07EFBFBDEFBFBDEFBFBD2D132FEFBFBDEFBFBD18EFBFBD6738EFBFBDEFBFBD,34个字节,因此其长度为34(不是26 )。

根本原因是java.lang.String的构造函数:

公共字符串(字节[]字节)

  

通过使用以下命令解码指定的字节数组来构造新的String   平台的默认字符集。新字符串的长度为   字符集的功能, 因此可能不等于长度   字节数组