java的ByteBuffer类。
        ByteBuffer类使用byte数组对象作为其内部数据结构,管理这个byte数组对象的类名叫HeapByteBuffer,寓意ByteBuffer的缓冲区是建立在托管堆之上的。
        在HeapByteBuffer中,每个存储单元都是一个byte,byte是大多数计算机中最基本的数据单元。
        ByteBuffer的构造器允许以一个特定的容量构造ByteBuffer对象,也可以从一个已存在的byte数组对象上构建ByteBuffer对象。
        ByteBuffer.allocate用于设置一个新的capacity,而ByteBuffer.warp方法则是使用一个byte数组对象取代当前的byte数组对象。
        ByteBuffer.allocateDirect方法也是设置一个新的capacity,但在此之前它会销毁掉已经存在的ByteHeapBuffer对象,重新建立DirectByteBuffer
对象,经过查看源代码,可以得知DirectByteBuffer是没有安全检测能力的,也就是说它是分配在非托管内存空间里的,所以ByteDirectBuffer缓冲区可能无法捕获诸如溢出,数据类型错误等等异常,它也不受垃圾回收的管理,而是使用类似于C++的显式内存释放,但可以肯定的是,ByteDirectBuffer的速度要快的多。由于DirectByteBuffer也是Buffer的子类,所以ByteBuffer是无法分辨出来它和ByteHeapBuffer的区别的,操作方法都是完全相同的。
        ByteBuffer中最主要的两个方法就是put和get方法了,一个是向缓冲区放置数据,另一个是读取数据,通过limit和position这两个值就可以判断缓冲区什么时候是满的,什么时候是空的。这两个方法可以采用传统的队列定位(相对定位),也可以采用直接定位(绝对定位),操作都很简单。
        除了将ByteBuffer对象转变成诸如DoubleBuffer对象外,ByteBuffer对象本身也可以直接返回各种数据类型,例如使用ByteBuffer.getInt方法就可以返回Integer类型的数据。
        ByteBuffer.order方法用于获取和设置当前数据的字节顺序,包括大头数据,小头数据等,由于Internet数据跨越多种主机传送,而每一种机器表示数据的方式不同,所以做一些转换是必要的。Java使用ByteOrder类处理字节顺序,ByteOrder.nativeOrder就可以得到当前JVM确定的字节顺序。

        ByteBuffer的另一个子类MappedByteBuffer从字面上可以看出是使用Map这个数据结构取代了ByteBuffer传统的队列数据结构,Map数据结构具有索引功能,比队列具有更好的查询能力,适合用来做文件的缓冲


找了半天只有一个叫Buffer的: (

posted on 2006-05-01 16:22  左边的天空  阅读(3972)  评论(0编辑  收藏  举报