java - hbase rowkey 设计中的“字节模式”
问题描述
我不理解“字节模式”中的示例:
// 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 ?
谢谢
解决方案
在我的日食中,“摘要”是 0xE807F1FCF82D132F9BB018CA6738A19F,16 个字节,所以它的长度是 16。
“sbDigest”是 0xEFBFBD07EFBFBDEFBFBDEFBFBD2D132FEFBFBDEFBFBD18EFBFBD6738EFBFBDEFBFBD,34 字节,所以它的长度是 34(不是 26)。
根本原因是java.lang.String的构造函数:
公共字符串(字节 [] 字节)
通过使用平台的默认字符集解码指定的字节数组来构造一个新的字符串。新字符串的长度是字符集的函数,因此可能不等于字节数组的长度。
推荐阅读
- sql - 在 Oracle 中创建带间隔的时间维度表
- docker - SocketIO (docker 副本) + Nginx + Browser = 副本总数的重复发出事件
- php - 抽象工厂类返回接口类型,找不到方法?
- php - Laravel-file_put_contents()-打开流失败,权限被拒绝
- java - Java如何将0作为分母显示在有理类中
- php - 如何在php中运行节点模块并显示输出?
- python - 无法使用 OpenCV 编写和保存实时视频
- react-native - 在 react native 中使用尺寸无法获得准确的屏幕高度和宽度
- javascript - 将数组中具有相同值的对象合并到一个新对象中
- mysql - MySQL 没有正确更新