快速擦除(不清楚)Java中的字节缓冲器

2022-09-03 14:18:20

我正在尝试“清理”一个都是零字节(全部)。我试图循环访问缓冲区中的所有位置,并将它们设置为 ,但效率很差。有没有更好的方法来快速清除 - 类似于什么?ByteBuffer0x000x00ByteBufferBitSet.clear()

请注意,在这种情况下,这对我来说不是一个合适的解决方案 - 我必须擦除缓冲区内的所有数据,而不仅仅是重置指向开头的指针。ByteBuffer.clear()

任何提示?

编辑:ByteBuffer用作哈希表的一部分,它维护哈希表条目的引用。每次需要刷新哈希表时,我都必须重置哈希表条目,以便以后插入哈希表。由于哈希表是以随机方式访问的,因此我无法简单地清除()字节缓冲区的状态。


答案 1

您是否尝试过使用 or 方法之一一次性写入多个零?然后,您可以使用预先填充有零的数组或缓冲区,以 100 或 1000 字节的块或其他大小循环访问缓冲区。ByteBuffer.put(byte[])ByteBuffer.put(ByteBuffer)

缺点:这是一个可选操作,因此并非所有ByteBuffer的实现都需要提供它...


答案 2

对于提供可选方法(其中返回)的实现,可以使用此方法获取对基础数组的引用,然后使用 。ByteBufferarray()hasArray()truejava.util.Arrays#fill()


推荐