首页 > 解决方案 > hbase rowkey 设计中的“字节模式”

问题描述

来自Hbase 行键设计

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

 // 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 != digest.length ?

谢谢

标签: javaencoding

解决方案


在我的日食中,“摘要”是 0xE807F1FCF82D132F9BB018CA6738A19F,16 个字节,所以它的长度是 16。

“sbDigest”是 0xEFBFBD07EFBFBDEFBFBDEFBFBD2D132FEFBFBDEFBFBD18EFBFBD6738EFBFBDEFBFBD,34 字节,所以它的长度是 34(不是 26)。

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

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

通过使用平台的默认字符集解码指定的字节数组来构造一个新的字符串。新字符串的长度是字符集的函数,因此可能不等于字节数组的长度


推荐阅读