java NIO(六) 缓冲区——复制缓冲区


当一个管理其他缓冲区所包含的数据元素的缓冲区被创建时,这个缓冲区被称为视图缓冲区

大多说的视图缓冲区都是ByteBuffer的视图。

本章节的“复制缓冲区”和下一个章节将要讲解的“视图缓冲区”很有联系,我们要注意。

本章节我们还是以CharBuffer为例,先介绍CharBuffer类中定义的几个复制缓冲区的方法:

public abstract CharBuffer asReadOnlyBuffer()创建共享此缓冲区内容的新的只读字符缓冲区。 
新缓冲区的内容将为此缓冲区的内容。此缓冲区的更改在新缓冲区中是可见的,但新缓冲区将是只读的并且不允许修改共享内容。两个缓冲区的位置、界限和标记值是相互独立。 

新缓冲区的容量、界限、位置和标记值将与此缓冲区相同。 

如果此缓冲区本身是只读的,则此方法与 duplicate 方法完全相同。 

返回:
新的只读字符缓冲区

生成一个只读的缓冲区视图,与duplicate相同,除了这个新的缓冲区不容许使用put,且其isReadOnly()函数将返回true。


public abstract CharBuffer duplicate()创建共享此缓冲区内容的新的字符缓冲区。 
新缓冲区的内容将为此缓冲区的内容。此缓冲区内容的更改在新缓冲区中是可见的,反之亦然;这两个缓冲区的位置、界限和标记值是相互独立的。 

新缓冲区的容量、界限、位置和标记值将与此缓冲区相同。当且仅当此缓冲区为直接时,新缓冲区才是直接的,当且仅当此缓冲区为只读时,新缓冲区才是只读的。 

返回:
新的字符缓冲区

duplicate创建了一个和原始缓冲区相似的新缓冲区。两个缓冲区共享数据元素,拥有同样的容量(c),但每个缓冲区拥有各自的位置(p),上界(l)和标记属性(m)。

对一个缓冲区内的数据元素所做的改变会放映在另一个缓冲区中。视图缓冲区会继承原始缓冲区:只读、直接属性。

CharBuffer charBuffer=CharBuffer.allocate(8);

charBuffer.position(3).limit(6).mark().position(5);

CharBuffer dupeBuffer=charBuffer.duplicate();

dupeBuffer.clear();



public abstract CharBuffer slice()创建新的字符缓冲区,其内容为此缓冲区内容的共享子序列。 
新缓冲区的内容将从此缓冲区的当前位置开始。此缓冲区内容的更改在新缓冲区中是可见的,反之亦然;这两个缓冲区的位置、界限和标记值是相互独立的。 

新缓冲区的位置将为零,其容量和界限将为此缓冲区中所剩余的字符数量,其标记是未定义的。当且仅当此缓冲区为直接时,新缓冲区才是直接的,当且仅当此缓冲区为只读时,新缓冲区才是只读的。 

返回:
新的字符缓冲区

char[] myBuffer=new char[100];

CharBuffer cb=CharBuffer.wrap(myBuffer);

cb.position(12).limit(21);

CharBuffer sliced=cb.slice();



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值