2007年4月1日星期日

小心ByteBuffer的array()

今天调试程序,发现jdk中ByteBuffer与字节数组之间关系暧昧。
首先,同一个字节数组上可以构建许多个甚至重叠的ByteBuffer,他们在同一段内存上读写。
其次,这许多ByteBuffer的array()方法返回的都是同一个底层的字节数组,而不是他标记的这一段。
事实上,ByteBuffer通过如下三个字段来标记自己与底层数组的关系:
array
arrayoffset//起始偏移
capacity//大小

ByteBuffer完整控制对应的底层数组,当且仅当
arrayoffset=0且capacity=array.length

通常使用的时候,我们只用上面一小段,精细控制。但是别忘了他底层实现的机理。

没有评论: