- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
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
您可能关注的文档
- iostat各项指标含义.doc
- iOS培训开发学习路线图(含AppleWatch)必威体育精装版.docx
- ios开发经常用到的代码.doc
- IOS手机软件开发学习笔记.docx
- IPAD3恋上微型投影.doc
- IPAD图片如何快速传到电脑.doc
- IPAM7404计数测频远程IO数据采集模块如何读取modbus指令格式?.doc
- IPHONE4手机怎样把电脑里的音乐设置成铃声.doc
- iphone5s铃声:iphone5s换铃声的方法.doc
- iPhone丢失找寻方法.doc
- 2025年中国电子计算器行业市场发展现状及投资规划建议报告.docx
- 中国接触式读卡器行业市场全景评估及发展战略规划报告.docx
- 2023-2029年中国石棉板行业市场全景评估及投资规划建议报告.docx
- 2025年中国片式压敏电阻器行业市场运营现状及投资方向研究报告.docx
- 2025年中国霍尔开关行业市场调研及未来发展趋势预测报告.docx
- 中国TFT-LCD面板行业发展监测及投资方向研究报告.docx
- 中国蒸发式冷凝器市场竞争格局及投资战略规划报告.docx
- 2025年中国家电流通行业市场前景预测及投资战略研究报告.docx
- 2021-2026年中国玻璃拼镜市场供需现状及投资战略研究报告.docx
- 2025年中国燃油燃气灶行业市场发展现状及投资战略咨询报告.docx
文档评论(0)