Java网络编程从入门到精通(33):非阻塞I/O的缓冲区(Buffer)
2009-09-22 00:00:00 来源:WEB开发网其他五个缓冲区类中的wrap 方法定义和上面的定义类似,只是返回值的类型是相应的缓冲区类。
在wrap方法中的array参数是要转换的数组(如果是其他的缓冲区类,数组的类型就是相应的简单类型,如IntBuffer类中的wrap方法的array就是int[]类型)。offset是要转换的子数组的偏移量,也就是子数组在array中的开始索引。length是要转换的子数组的长度。利用后两个参数可以将array数组中的一部分转换成缓冲区对象。它们的使用方法如下:
byte[] myByte = new byte[] { 1, 2, 3 };
int[] myInt = new int[] { 1, 2, 3, 4 };
ByteBuffer byteBuffer = ByteBuffer.wrap(myByte);
IntBuffer intBuffer = IntBuffer.wrap(myInt, 1, 2);
可以通过缓冲区类的capacity方法来得到缓冲区的大小。capacity方法的定义如下:
public final int capacity()
如果使用allocate方法来创建缓冲区,capacity方法的返回值就是capacity参数的值。而使用wrap方法来创建缓冲区,capacity方法的返回值是array数组的长度,但要注意,使用wrap来转换array的字数组时,capacity的长度仍然是原数组的长度,如上面代码中的intBuffer缓冲区的capacity值是4,而不是2。
除了可以将数组转换成缓冲区外,也可以通过缓冲区类的array方法将缓冲区转换成相应类型的数组。IntBuffer类的array方法的定义方法如下(其他缓冲区类的array的定义类似):
public final int[] array()
下面的代码演示了如何使用array方法将缓冲区转换成相应类型的数组。
int[] myInt = new int[] { 1, 2, 3, 4, 5, 6 };
IntBuffer intBuffer = IntBuffer.wrap(myInt, 1, 3);
for (int v : intBuffer.array())
System.out.print(v + " ");
更多精彩
赞助商链接