要求:
要对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);
结果(毫秒数):
397
471
473
400