Java高效的bytesToHexString

普通的bytesToHexString:

利用Integer.toHexString()来实现

(以下代码源于网络)

    public static String bytesToHexString(byte... src) {
        StringBuilder stringBuilder = new StringBuilder();
        if (src == null || src.length <= 0) {
            return null;
        }
        for (int i = 0; i < src.length; i++) {
            int v = src[i] & 0xFF;
            String hv = Integer.toHexString(v);
            if (hv.length() < 2) {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv);
        }
        return stringBuilder.toString();
    }

 高效的bytesToHexString:

通过对一个只读数组hexArray进行读取来实现

(以下代码源于网络)

    private final static char[] hexArray = "0123456789ABCDEF".toCharArray();

    public static String byteArrToHex(byte... bytes) {
        char[] hexChars = new char[bytes.length * 2];
        for (int j = 0; j < bytes.length; j++) {
            int v = bytes[j] & 0xFF;
            hexChars[j * 2] = hexArray[v >>> 4];
            hexChars[j * 2 + 1] = hexArray[v & 0x0F];
        }
        return new String(hexChars);
    }

测试代码:

随机生成特定长度的byte数组,传进算法用System.nanoTime()测试执行时间。循环执行25次取平均值

public static void main(String[] args) {
        int len = 500000;
        byte[] bytes = new byte[len];
        Random r = new Random();
        r.nextBytes(bytes);
        long time;

        long sum1 = 0;
        long sum2 = 0;

        for (int i = 0; i < 25; i++) {
            time = System.nanoTime();
            byteArrToHex(bytes);
            sum1 += (System.nanoTime() - time);

            time = System.nanoTime();
            bytesToHexString(bytes);
            sum2 += (System.nanoTime() - time);
        }

        System.out.println("fun1: " + (sum1 / 25));
        System.out.println("fun2: " + (sum2 / 25));
    }

测试结果:

当长度len为1时:

fun1: 1228
fun2: 3709

当长度len为500时:

fun1: 23938
fun2: 124859

当长度len为1000000时:

fun1: 3388851
fun2: 34042681

测试环境:

CPU:Intel Core I5-8250U

RAM:8GB

操作系统:Win10 家庭版 17134.472

JDK:1.8.0_181

 

总结:方法2 byteArrToHex 的执行效率远高于方法1 bytesToHexString

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值