- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java中缓冲区(直接缓冲区-非直接缓冲区等)
Java中的缓冲区(直接缓冲区、非直接缓冲区等)
如果将同步I/O方式下的数据传输比做数据传输的零星方式(这里的零星是指在数据传输的过程中是以零星的字节方式进行的),那么就可以将非阻塞I/O方式下的数据传输比做数据传输的集装箱方式(在字节和低层数据传输之间,多了一层缓冲区,因此,可以将缓冲区看做是装载字节的集装箱)。
如果将同步I/O方式下的数据传输比做数据传输的零星方式(这里的零星是指在数据传输的过程中是以零星的字节方式进行的),那么就可以将非阻塞I/O方式下的数据传输比做数据传输的集装箱方式(在字节和低层数据传输之间,多了一层缓冲区,因此,可以将缓冲区看做是装载字节的集装箱)。大家可以想象,如果我们要运送比较少的货物,用集装箱好象有点不太合算,而如果要运送上百吨的货物,用集装箱来运送的成本会更低。在数据传输过程中也是一样,如果数据量很小时,使用同步I/O方式会更适合,如果数据量很大时(一般以G为单位),使用非阻塞I/O方式的效率会更高。因此,从理论上说,数据量越大,使用非阻塞I/O方式的单位成本就会越低。产生这种结果的原因和缓冲区的一些特性有着直接的关系。在本节中,将对缓冲区的一些主要特性进行讲解,使读者可以充分理解缓冲区的概念,并能通过缓冲区来提高程序的执行效率。
创建缓冲区
Java提供了七个基本的缓冲区,分别由七个类来管理,它们都可以在java.nio包中找到。这七个类如下所示:
?? ByteBuffer? ShortBuffer? IntBuffer? CharBuffer? FloatBuffer? DoubleBuffer? LongBuffer? st1:*{behavior:url(#ieooui)?} 这七个类中的方法类似,只是它们的返回值或参数和相应的简单类型相对应,如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个。
2. 通过静态方法wrap来创建缓冲区。
使用allocate方法可以创建一个空的缓冲区。而wrap方法可以利用已经存在的数据来创建缓冲区。wrap方法可以将数组直接转换成相应类型的缓冲区。wrap方法有两种重载形式,它们的定义如下:
ByteBuffer类中的wrap方法:
?? public?static?ByteBuffer?wrap(byte[]?array)? public?static?ByteBuffer?wrap(byte[]?ar
您可能关注的文档
- GoldenPeakHotel员工手则.doc
- GRE阅读难句精解—杨鹏难句.doc
- GSRM情侣特辑之新“花千骨”.doc
- Groupon风波启示—摆脱资本玩弄寻求新生机.doc
- GS教师用报参考NO10(19—20期).doc
- GS教师用报参考NO8(15—16期).doc
- Gpeejx基准论文格式要求范本[超全].doc
- GridTechnology在校园网中应用研究.doc
- GW350㎏—280KW中频无芯感应熔炼炉体使用说明书.doc
- Gwizpb财务的管理制度模板.doc
- 山东泰山钢铁集团有限公司校园招聘模拟试题附带答案详解完整版.docx
- 二零二五版场地招商合同模板.docx
- 山东泰山钢铁集团有限公司校园招聘模拟试题附带答案详解完美版.docx
- CAD软件:ArchiCAD二次开发_(13).ArchiCAD二次开发最佳实践.docx
- 二零二五出租车司机聘用合同.docx
- 山东泰山钢铁集团有限公司校园招聘85人公开引进高层次人才和急需紧缺人才笔试参考题库答案详解版一套.docx
- 南通个人房屋租赁合同二零二五年.docx
- 气管切口后期康复护理.pptx
- 山东泰山纸业股份有限公司校园招聘模拟试题附带答案详解汇编.docx
- 山东泰山纸业股份有限公司校园招聘模拟试题附带答案详解带答案.docx
最近下载
- 急诊与灾难医学-第二十二章 人为灾难的医学救援.pptx
- 030904《项目实施进度里程碑确认单》.xlsx VIP
- 治疗篇第六章骨伤科四肢病证推拿讲解.ppt
- 2025年广西机场管理集团有限责任公司人员招聘笔试备考题库及答案解析.docx
- 七年级下册英语课件Unit 3《Keep Fit》(Section A 1a-1d).pptx VIP
- 福特嘉年华说明书.pdf
- 医院医疗设备管理员及使用人员岗位职责.pptx VIP
- 江苏省小学科学实验知识竞赛题库附答案.pdf VIP
- 教科版(2017秋)四年级下册科学期末复习训练题(含答案).docx VIP
- 八年级下数学期中测试题(a卷).pdf VIP
文档评论(0)