分配后清除()bytebuffer是否是一种好的做法?

分配后清除()bytebuffer是否是一种好的做法?

问题描述:

我继承了编写使用本地ByteBuffer消息到插座一些Java代码:分配后清除()bytebuffer是否是一种好的做法?

public void sendMessage(){ 
    ByteBuffer byteBuffer = ByteBuffer.allocateDirect(1024); 
    byteBuffer.clear(); 
    byteBuffer.putInt((int) 128); 
} 

看来,clear()调用是不必要的。不会分配保证返回释放的内存块吗?

+1

分配时清零内存,clear()不清零内存。 –

完全没有必要在allocateDirect之后拨打clear()

allocateDirect做的是:

新缓冲区的位置将为零,其界限将为其容量,其标记是不确定的,并且它的每个元素将被初始化为零。

clear做的是:

位置设置为零,限制设置为容量,并且标记将被丢弃。
[..]
此方法实际上并不会擦除缓冲区中的数据,但它的名称就像它的名字一样,因为它最常用于那种情况。

换句话说,所述ByteBuffer的分配后直接的状态是一样的状态clear()(忽略这一事实clear()不元件复位到零)之后。

+0

谢谢你,感谢你。 –

如果你还没有使用缓冲区,就没有必要清除缓冲区(并且弄乱了标记)。

请注意,即使在呼叫清除之后,mem中的任何内容仍然存在,因为它只是重置限制并抛出当前标记。

因此,最终数据区结果与新分配的结果相同。

然而常见的经常清除你从未知代码收到一个缓冲参考,以填补像:

ByteBuffer FillBytes(ByteBuffer buf) 
{ 
    buf.clear(); 
    //--- 
} 

因为即使你可能会有点假设传递给你的缓冲区将准备灌装,由于方法合同的性质,您不能假定初始开发人员在您的方法试图填充它之前已将其重置(可能已用于某些东西,因此需要重置)。