java.nio: 在ByteBuffer 对象上创建非字节类型缓冲区

作者在 2011-12-10 23:37:25 发布以下内容

我们可以在字节缓冲区(ByteBuffer)上创建 视图  以支持其它基本数据类型的缓冲区(Buffer)。比如,可以在ByteBuffer对象上创建一个字符型视图,在对待ByteBuffer时就好像在对待存放了字符的缓冲区一样。字符缓冲区直接支持字符串。同样地,视图的hasRemaining()方法返回的是字符数。

在处理一个已指定类型的字节缓冲区的视图时,要特别注意视图是创建在字节缓冲区的positionlimit间的字节之上的。也就是说,视图的capacity大小是(limit – position),且视图的limit会根据指定类型的类型长度(如int为4字节大小)而减小,以使capacity是特定类型长度的整数倍。最后,视图和底层的ByteBuffer共享同一块存储区,任何对ByteBuffer字节数据的改变都会影响到视图,反之亦然。不过,视图的positionlimit的变化并不会影响到ByteBuffer的同名属性,反之亦然。

// 创建一个ByteBuffer对象,capacity=15
ByteBuffer buf = ByteBuffer.allocate(15);
// remaining = 15

// 在buf上创建字符视图
CharBuffer cbuf = buf.asCharBuffer();
// remaining = 7

// 短整型视图
ShortBuffer sbuf = buf.asShortBuffer();
// remaining = 7

// 整型视图
IntBuffer ibuf = buf.asIntBuffer();
// remaining = 3

//长整型视图
LongBuffer lbuf = buf.asLongBuffer();
// remaining = 1

// 单精度浮点型
FloatBuffer fbuf = buf.asFloatBuffer();
// remaining = 3

// 双精度浮点型
DoubleBuffer dbuf = buf.asDoubleBuffer();
// remaining = 1
 下面是视图cbuf的实验和结果:
        System.out.println(cbuf.position());//0
        System.out.println(cbuf.limit());//7
        System.out.println(cbuf.remaining());//7
        System.out.println(cbuf.capacity());//7
 

NIO | 阅读 1516 次
文章评论,共0条
游客请输入验证码
浏览68502次
最新评论