日期:2014-05-20  浏览次数:20783 次

IoBuffer是怎样的一种数据结构
小弟初学JAVA 对于Iobuffer的内存分配不清楚 IoBuffer是像队列一样先进先出 还是像栈一样的数据结构?每次读写是position是怎样移动的? 望大家解答一下~

------解决方案--------------------
就是数据缓冲区嘛,很难理解吗 ?
说白了,可以理解成就是一个byte数组,里面存放数据。
系统设法将byte[]中填充数据,
你在读取这些数据的时候,会存在两个指示器,
一个是当前可读取数据的位置,另一个是数据填充到哪儿的位置。
打个比方,你建缓冲区,(肯定是个数组啦),一次肯定不会和读取数据长度相同,一般都会稍微大点对吧,
就和上超市购物前买购物袋,一般都会买个差不多大的,不会专买小的,放不下东西,就糗了。
读取操作,也是从数组中,由前向后(由0位置向后)逐个读取。
但是,一般不会一次性把缓冲区所有数据都读完,一般只是读其中的一小部分数据,先做处理,
然后,再接着读一小部分,直到末尾。
那么,就需要position这个变量来记录,当前可读数据的位置咯,
否则,这次读完了数据,下次都不知道从哪个位置开始读取了。
limit指向有用数据的末尾位置。
比如,我创建了一个4096大小的一个字节数组做缓冲区,但是,实际填充的数据,可能只有1389个字节,
那么,position是0,limit是1389,
当我读取4个字节以后,position是4,limit是1389,
当position和limit相等时,说明,缓冲区没有可读的数据了,需要填充数据或者结束读取操作了。

当然,由于没怎么用过IoBuffer,所以,忘了它是否支持翻转了。
有些缓冲区,只能向里面写入数据,有的缓冲区,只能向外读出数据,
而,支持翻转的缓冲区,既可以向里面写入数据,也可以向外读取数据,
只是在读写操作之间,加入翻转操作即可。