这是How can I make an IntStream from a byte array?
的后续问题我创建了一个方法,将给定的字节数组转换为连接的十六进制字符串。
static String bytesToHex(final byte[] bytes) {
return IntStream.rang(0, bytes.length * 2)
.map(i -> (bytes[i / 2] >> ((i & 0x01) == 0 ? 4 : 0)) & 0x0F)
.mapToObj(Integer::toHexString)
.collect(joining());
}
我的问题是,不使用任何第三方库,上面的代码是否足够有效?我做错了什么或不必要的吗?
答案 0 :(得分:6)
static String bytesToHex(final byte[] bytes) {
return IntStream.range(0, bytes.length)
.mapToObj(i->String.format("%02x", bytes[i]&0xff))
.collect(joining());
}
虽然以下可能更有效:
static String bytesToHex(final byte[] bytes) {
return IntStream.range(0, bytes.length)
.collect(StringBuilder::new,
(sb,i)->new Formatter(sb).format("%02x", bytes[i]&0xff),
StringBuilder::append).toString();
}
两者都支持并行处理。