WEB开发网
开发学院软件开发Java Java网络编程从入门到精通(33):非阻塞I/O的缓冲... 阅读

Java网络编程从入门到精通(33):非阻塞I/O的缓冲区(Buffer)

 2009-09-22 00:00:00 来源:WEB开发网   
核心提示: ByteBuffer类中的allocate方法:publicstaticByteBufferallocate(intcapacity) IntBuffer类中的allocate方法:publicstaticIntBufferallocate(intcapacity) 其他五个缓冲区类中的allo

ByteBuffer类中的allocate方法:

public static ByteBuffer allocate(int capacity)

IntBuffer类中的allocate方法:

public static IntBuffer allocate(int capacity)

其他五个缓冲区类中的allocate 方法定义和上面的定义类似,只是返回值的类型是相应的缓冲区类。

allocate方法有一个参数capacity,用来指定缓冲区容量的最大值。capacity的不能小于0,否则会抛出一个IllegalArgumentException异常。使用allocate来创建缓冲区,并不是一下子就分配给缓冲区capacity大小的空间,而是根据缓冲区中存储数据的情况来动态分配缓冲区的大小(实际上,在低层Java采用了数据结构中的堆来管理缓冲区的大小),因此,这个capacity可以是一个很大的值,如1024*1024(1M)。allocate的使用方法如下:

ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
IntBuffer intBuffer = IntBuffer.allocate(1024); 

在使用allocate创建缓冲区时应用注意,capacity的含义随着缓冲区的不同而不同。如创建字节缓冲区时,capacity指的是字节数。而在创建整型(int)缓冲区时,capacity指的是int型值的数目,如果转换成字数,capacity的值应该乘4。如上面代码中的intBuffer缓冲区最大可容纳的字节数是1024*4 = 4096个。

2.        通过静态方法wrap来创建缓冲区。

使用allocate方法可以创建一个空的缓冲区。而wrap方法可以利用已经存在的数据来创建缓冲区。wrap方法可以将数组直接转换成相应类型的缓冲区。wrap方法有两种重载形式,它们的定义如下:

ByteBuffer类中的wrap方法:

public static ByteBuffer wrap(byte[] array)
public static ByteBuffer wrap(byte[] array, int offset, int length)
IntBuffer类中的wrap方法:
public static IntBuffer wrap(byte[] array)
public static IntBuffer wrap(byte[] array, int offset, int length)

上一页  1 2 3 4 5  下一页

Tags:Java 网络编程 入门

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接