分配后清除()bytebuffer是否是一种好的做法?
我继承了编写使用本地ByteBuffer
消息到插座一些Java代码:分配后清除()bytebuffer是否是一种好的做法?
public void sendMessage(){
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(1024);
byteBuffer.clear();
byteBuffer.putInt((int) 128);
}
看来,clear()
调用是不必要的。不会分配保证返回释放的内存块吗?
完全没有必要在allocateDirect
之后拨打clear()
。
allocateDirect
做的是:
新缓冲区的位置将为零,其界限将为其容量,其标记是不确定的,并且它的每个元素将被初始化为零。
clear
做的是:
位置设置为零,限制设置为容量,并且标记将被丢弃。
[..]
此方法实际上并不会擦除缓冲区中的数据,但它的名称就像它的名字一样,因为它最常用于那种情况。
换句话说,所述ByteBuffer
的分配后直接的状态是一样的状态clear()
(忽略这一事实clear()
不元件复位到零)之后。
谢谢你,感谢你。 –
如果你还没有使用缓冲区,就没有必要清除缓冲区(并且弄乱了标记)。
请注意,即使在呼叫清除之后,mem中的任何内容仍然存在,因为它只是重置限制并抛出当前标记。
因此,最终数据区结果与新分配的结果相同。
然而常见的经常清除你从未知代码收到一个缓冲参考,以填补像:
ByteBuffer FillBytes(ByteBuffer buf)
{
buf.clear();
//---
}
因为即使你可能会有点假设传递给你的缓冲区将准备灌装,由于方法合同的性质,您不能假定初始开发人员在您的方法试图填充它之前已将其重置(可能已用于某些东西,因此需要重置)。
分配时清零内存,clear()不清零内存。 –