«Шаблоны байтов» в hbase rowkey design - PullRequest
0 голосов
/ 15 января 2019

из 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! = Digest.length?

Спасибо

1 Ответ

0 голосов
/ 26 июля 2019

в моем затмении, "digest" равен 0xE807F1FCF82D132F9BB018CA6738A19F, 16 байтов, поэтому его длина равна 16.

"sbDigest" равен 0xEFBFBD07EFBFBDEFBFBDEFBFBD2D132FEFBFBDEFBFBD18EFBFBD6738EFBFBDEFBFBD, 34 байта, поэтому его длина составляет 34 (, а не 26 ).

Основная причина - конструктор java.lang.String:

public String (byte [] bytes)

Создает новую строку путем декодирования указанного массива байтов с использованием кодировка платформы по умолчанию. Длина новой строки функция кодировки, и , следовательно, не может быть равна длине байтового массива .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...