final boolean hasRemaining()方法的作用:判断在当前位置和限制之间是否有元素。该方法的内部源代码如下:
public final boolean hasRemaining() { return position < limit; }
final int remaining()方法的作用:返回“当前位置”与限制之间的元素个数。该方法的内部源代码如下:
public final int remaining() { return limit - position; }
示例代码如下:
public class Test13 { public static void main(String[] args) { byte[] byteArray = new byte[] { 1, 2, 3 }; ByteBuffer bytebuffer = ByteBuffer.wrap(byteArray); bytebuffer.limit(3); bytebuffer.position(2); System.out.println("bytebuffer.hasRemaining=" + bytebuffer.hasRemaining() + " bytebuffer.remaining=" + bytebuffer.remaining()); } }
程序运行结果如下:
bytebuffer.hasRemaining=true bytebuffer.remaining=1
这两个方法可以在读写缓冲区中的数据时使用。本例仅测试读数据时的使用情况,示例代码如下:
public class Test13_1 { public static void main(String[] args) { byte[] byteArray = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; ByteBuffer byteBuffer = ByteBuffer.wrap(byteArray); int remaining = byteBuffer.remaining(); for (int i = 0; i < remaining; i++) { System.out.print(byteBuffer.get() + " "); } System.out.println(); byteBuffer.clear(); while (byteBuffer.hasRemaining()) { System.out.print(byteBuffer.get() + " "); } System.out.println(); byteBuffer.clear(); for (; byteBuffer.hasRemaining() == true;) { System.out.print(byteBuffer.get() + " "); } } }
程序运行结果如下:
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
运行结果表明成功取出全部的数据。