按bit写入的性能小测试

来源:互联网 发布:淘宝上好的牛排店 编辑:程序博客网 时间:2024/06/05 16:38

要求:
要对byte[]数组按照bit一位一位写入,有两种方式:
1. 从第0位到第7位,在第i位时用待写入的byte和1<<i做”|“操作。
2. 在末位与1做或操作,然后整体做<<位移。

结论:第二种较快。

代码如下:

Random r = new Random();        int testLen = 100000000;        boolean[] writeBits = new boolean[testLen];        for (int i = 0; i < writeBits.length; i++) {            writeBits[i] = ((r.nextInt() & 1) == 0);        }        byte bb = 0;        long start = 0;//避免类加载问题,第一个、第二个测试不算//        start = System.nanoTime();        start = System.currentTimeMillis();        for (int i = 0; i < writeBits.length; i++) {            bb <<= 1;            if (writeBits[i]) bb |= 1;        }//        System.out.println(System.nanoTime()-start);        System.out.println(System.currentTimeMillis()-start);//        start = System.nanoTime();        start = System.currentTimeMillis();        for (int i = 0; i < writeBits.length; i++) {            if (writeBits[i])                bb |= 1 << (i%8);        }//        System.out.println(System.nanoTime()-start);        System.out.println(System.currentTimeMillis()-start);//方法1//        start = System.nanoTime();        start = System.currentTimeMillis();        for (int i = 0; i < writeBits.length; i++) {            if (writeBits[i])                bb |= 1 << (i%8);        }//        System.out.println(System.nanoTime()-start);        System.out.println(System.currentTimeMillis()-start);//方法2//        start = System.nanoTime();        start = System.currentTimeMillis();        for (int i = 0; i < writeBits.length; i++) {            bb <<= 1;            if (writeBits[i]) bb |= 1;        }//        System.out.println(System.nanoTime()-start);        System.out.println(System.currentTimeMillis()-start);

结果(毫秒数):

397471473400
原创粉丝点击