简述getByteCount() & getAllocationByteCount()的区别 ?
参考答案:
getByteCount() 和 getAllocationByteCount() 是 Java NIO(非阻塞 I/O)的两个方法,它们都用于描述 ByteBuffer 中存储的数据的字节数,但它们的含义和用途有所不同。
getByteCount(): 这个方法返回ByteBuffer的limit与position之间的元素数量。换句话说,它返回的是从当前position到limit的字节数。这个值在调用flip()或rewind()方法后会被改变,因为这两个方法会改变position和limit的值。这个方法主要用于获取在当前状态下(即给定的position和limit)可以读取或写入的字节数。getAllocationByteCount(): 这个方法返回的是ByteBuffer的底层实现分配的字节数。这个值通常等于或大于ByteBuffer的容量(capacity()方法返回的值)。对于直接缓冲区(即使用allocateDirect()方法创建的缓冲区),这个值可能大于capacity(),因为直接缓冲区可能在操作系统级别上分配了额外的内存。这个方法主要用于了解ByteBuffer在内存中的实际占用情况,特别是当使用直接缓冲区时。
总的来说,getByteCount() 主要用于了解在当前状态下可以读取或写入的字节数,而 getAllocationByteCount() 主要用于了解 ByteBuffer 在内存中的实际占用情况。