当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:13:00  来源:本站整理

<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编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .