Java: преобразовать массив байтов в шестнадцатеричную строку?
У меня есть массив байтов, заполненный шестнадцатеричными числами, и печатать его простым способом довольно бессмысленно, потому что в нем много непечатаемых элементов. Что мне нужно, так это точный шестнадцатеричный код в виде: 3a5f771c
Переведено автоматически
Ответ 1
Из обсуждения здесь, и особенно из этого ответа, это функция, которую я использую в настоящее время:
Мои собственные крошечные тесты (миллион байт в тысячу раз, 256 байт в 10 миллионов раз) показали, что это намного быстрее, чем любая другая альтернатива, примерно в два раза быстрее для длинных массивов. По сравнению с ответом, из которого я его взял, переключение на побитовые операции --- как предлагалось в обсуждении --- сократите примерно на 20% время для длинных массивов. (Редактировать: когда я говорю, что это быстрее, чем альтернативные варианты, я имею в виду альтернативный код, предложенный в обсуждениях. Производительность эквивалентна кодеку Commons, который использует очень похожий код.)
В Java 8 и более ранних версиях JAXB был частью стандартной библиотеки Java. Он был устаревшим с Java 9 и удален с Java 11, как часть попытки переместить все пакеты Java EE в их собственные библиотеки. Это долгая история. Теперь, javax.xml.bind не существует, и если вы хотите использовать JAXB, который содержит DatatypeConverter, вам нужно будет установить JAXB API и JAXB Runtime из Maven.