Java nio 入门教程详解(2).doc

Java nio 入门教程详解(2).doc

ID:49473664

大小:644.05 KB

页数:40页

时间:2020-03-01

Java nio 入门教程详解(2).doc_第1页
Java nio 入门教程详解(2).doc_第2页
Java nio 入门教程详解(2).doc_第3页
Java nio 入门教程详解(2).doc_第4页
Java nio 入门教程详解(2).doc_第5页
资源描述:

《Java nio 入门教程详解(2).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Javanio入门教程详解(六)Java2013年8月12日暂无评论2.3复制缓冲区如我们刚刚所讨论的那样,可以创建描述从外部存储到数组中的数据元素的缓冲区对象。但是缓冲区不限于管理数组中的外部数据。它们也能管理其他缓冲区中的外部数据。当一个管理其他缓冲器所包含的数据元素的缓冲器被创建时,这个缓冲器被称为视图缓冲器。大多数的视图缓冲器都是ByteBuffer(参见2.4.3节)的视图。在继续前往字节缓冲器的细节之前,我们先将注意力放在所有存储器类型的共同视图上。视图存储器总是通过调用已存在的存储器实例中的函数来创建。使用已存在的存储器实例中的工厂方法意味着视图对象为原

2、始存储器的内部实现细节私有。数据元素可以直接存取,无论它们是存储在数组中还是以一些其他的方式,而不需经过原始缓冲区对象的get()/put()API。如果原始缓冲区是直接缓冲区,该缓冲区的视图会具有同样的效率优势。映像缓冲区也是如此(将于第三章讨论)。在这一章节中,我们将再次以CharBuffer为例,但同样的操作可被用于任何基本的缓冲区类型(参见图2.1)。1.publicabstractclassCharBufferextendsBufferimplementsCharSequence,Comparable 2.{ 3.//这里仅列出部分API 4.publica

3、bstractCharBufferduplicate(); 5.publicabstractCharBufferasReadOnlyBuffer(); 6.publicabstractCharBufferslice(); 7.}duplicate()函数创建了一个与原始缓冲区相似的新缓冲区。两个缓冲区共享数据元素,拥有同样的容量,但每个缓冲区拥有各自的位置,上界和标记属性。对一个缓冲区内的数据元素所做的改变会反映在另外一个缓冲区上。这一副本缓冲区具有与原始缓冲区同样的数据视图。如果原始的缓冲区为只读,或者为直接缓冲区,新的缓冲区将继承这些属性。直接缓冲区将在2.4.2

4、节中讨论。复制一个缓冲区会创建一个新的Buffer对象,但并不复制数据。原始缓冲区和副本都会操作同样的数据元素。缓冲区及其副本之间的联系如图2.12所示。这是如下文所示的代码产生的:1.CharBufferbuffer=CharBuffer.allocate(8); 2.buffer.position(3).limit(6).mark().position(5); 3.CharBufferdupeBuffer=buffer.duplicate(); 4.buffer.clear();图2-12复制一个缓冲区您可以使用asReadOnlyBuffer()函数来生成一个只

5、读的缓冲区视图。这与duplicate()相同,除了这个新的缓冲区不允许使用put(),并且其isReadOnly()函数将会返回true。对这一只读缓冲区的put()函数的调用尝试会导致抛出ReadOnlyBufferException异常。如果一个只读的缓冲区与一个可写的缓冲区共享数据,或者有包装好的备份数组,那么对这个可写的缓冲区或直接对这个数组的改变将反映在所有关联的缓冲区上,包括只读缓冲区。分割缓冲区与复制相似,但slice()创建一个从原始缓冲区的当前位置开始的新缓冲区,并且其容量是原始缓冲区的剩余元素数量(limit-position)。这个新缓冲区与原

6、始缓冲区共享一段数据元素子序列。分割出来的缓冲区也会继承只读和直接属性。图2-13显示了以与下面代码相似的代码所生成的分割缓冲区:1.CharBufferbuffer=CharBuffer.allocate(8); 2.buffer.position(3).limit(5); 3.CharBuffersliceBuffer=buffer.slice();图2-13创建分割缓冲区要创建一个映射到数组位置12-20(9个元素)的buffer对象,应使用下面的代码实现:1.char[]myBuffer=newchar[100]; 2.CharBuffercb=CharBuf

7、fer.wrap(myBuffer); 3.cb.position(12).limit(21); 4.CharBuffersliced=cb.slice();更详细关于视图buffer的讨论参见2.4.3节。Javanio入门教程详解(七)Java2013年8月14日暂无评论-2.4字节缓冲区在本章节中,我们将进一步观察字节缓冲区。所有的基本数据类型都有相应的缓冲区类(布尔型除外),但字节缓冲区有自己的独特之处。字节是操作系统及其I/O设备使用的基本数据类型。当在JVM和操作系统间传递数据时,将其他的数据类型拆分成构成它们的字节是十分必要的。如我们在

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。