我试图"清理"a ByteBuffer为所有零字节(全部0x00).我试图遍历缓冲区中的所有位置并将它们设置为0x00,但效率很差.有没有更好的方法来快速清除ByteBuffer- 类似于什么BitSet.clear()?
请注意,ByteBuffer.clear()在这种情况下,对我来说这不是一个合适的解决方案 - 我必须擦除缓冲区内的所有数据,而不仅仅是将指针重置为开头.
任何提示?
编辑:ByteBuffer用作哈希表的一部分,它维护哈希表条目的引用.每次需要刷新哈希表时,我都必须重置哈希表条目以便以后的哈希表插入.由于以随机方式访问哈希表,我不能简单地清除()字节缓冲区的状态.
我今天遇到了一个有趣的"时间旅行"问题,使用以下代码:
for (int i = 0; i < 1; i++){
long start = System.currentTimeMillis();
// Some code here
System.out.print(i + "\t" + (System.currentTimeMillis() - start));
start = System.currentTimeMillis();
// Some code here
System.out.println("\t" + (System.currentTimeMillis() - start));
}
Run Code Online (Sandbox Code Playgroud)
我得到了结果
0 15 -606
Run Code Online (Sandbox Code Playgroud)
它似乎不可重复.任何人都有关于在运行时间内发生的事情的任何线索?只是好奇...
新编辑:我使用了一个小测试来确认下面的答案.我运行程序并在运行期间更改系统时间,最后重复"时间旅行":
0 -3563323 163
Run Code Online (Sandbox Code Playgroud)
案件结案.多谢你们!
更多的话:currentTimeMillis()和nanoTime()都是基于系统定时器的,所以如果更新系统定时器(具体而言,转回),它们将不是单调的.对于这种情况,最好使用一些基于互联网的计时器.