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

解决方案 »

  1.   

    你说的是buffered接口??
    bufferedreader/writer 是流的带缓冲区的包装
    他和数据结构木有关系...请先看明白io作用机制...
      

  2.   

    不是接口,我指的是MINA框架里的IoBuffer类,它是对NIO里byteBuffer封装后的一个类,但我不知道它试试如何存储数据的.........
      

  3.   

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