<b>Java网络编程从入门到精通(33):非阻塞I/O的缓冲区(Buffer)</b>[Java编程]
本文“<b>Java网络编程从入门到精通(33):非阻塞I/O的缓冲区(Buffer)</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
假如将同步I/O方法下的数据传输比做数据传输的零星方法(这里的零星是指在数据传输的历程中是以零星的字节方法举行的),那么便可以将非阻塞I/O方法下的数据传输比做数据传输的集装箱方法(在字节和低层数据传输之间,多了一层缓冲区,因此,可以将缓冲区看做是装载字节的集装箱).大家可以想象,假如我们要运送对比少的货物,用集装箱好象有点不太合算,而假如要运奉上百吨的货物,用集装箱来运送的本钱会更低.在数据传输历程中也是一样,假如数据量很小时,利用同步I/O方法会更合适,假如数据量很大时(普通以G为单位),利用非阻塞I/O方法的效率会更高.因此,从理论上说,数据量越大,利用非阻塞I/O方法的单位本钱就会越低.产生这种后果的缘由和缓冲区的一些特点有着直接的关系.在本节中,将对缓冲区的一些主要特点举行讲授,使读者可以充分理解缓冲区的概念,并能通过缓冲区来提高程序的履行效率.
成立缓冲区
Java供应了七个基本的缓冲区,辨别由七个类来管理,它们都可以在java.nio包中找到.这七个类以下所示:
ByteBuffer
ShortBuffer
IntBuffer
CharBuffer
FloatBuffer
DoubleBuffer
LongBuffer
这七个类中的办法近似,只是它们的返回值或参数和呼应的简单范例相对应,如ByteBuffer类的get办法返回了byte范例的数据,而put办法需求一个byte范例的参数.在CharBuffer类中的get和put办法返回和传送的数据范例就是char.这七个类都没有public构造办法,因此,它们不能通过new来成立呼应的对象实例.这些类都可以通过两种方法来成立呼应的对象实例.
1.通过静态办法allocate来成立缓冲区.
这七类都有一个静态的allocate办法,通过这个办法可以成立有最大容量限制的缓冲区对象.allocate的定义以下:
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个.
以上是“<b>Java网络编程从入门到精通(33):非阻塞I/O的缓冲区(Buffer)</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |