ByteBuffer get(byte[] dst) 
          相对批量 get 方法。  ByteBuffer get(byte[] dst, int offset, int length) 
          相对批量 get 方法。 abstract  byte get(int index) 
          绝对 get 方法。 上面内容来自于java API文档,请问什么是“绝对”方法,什么是“相对”方法?以上三个方法要么只读取一个字节,要么读取全部字节。我想读取部分字节,怎么做到?用第三个方法去实现?那样会不会效率太低了?

解决方案 »

  1.   

    用ByteBuffer get(byte[] dst, int offset, int length) 不能实现读取部分字节吗?参数分别为(目标字节数组,偏移,长度)应该可以的吧。
      

  2.   

    ByteBuffer get(byte[] dst)
    取得全部
    ByteBuffer get(byte[] dst, int offset, int length)
    读取部分字节啊相对是指相对于dst中的某一个或某些abstract byte get(int index)
    绝对是指取得指定的位置的某个byte
      

  3.   

    1楼朋友好,请参看三楼朋友回复。ByteBuffer get(byte[] dst, int offset, int length)
    这里面的offset和length指的是dst而不是ByteBuffer,它读取的还是整个缓冲区字节。目前看只能通过abstract byte get(int index)一个字节一个字节读,1K的数据要读上1000多次,这效率不敢想像啊!
      

  4.   

    byte[]  dst = .............
    ByteBuffer test = get(dst,5,10);
    意思是取从第5个字节读取10个长度byte,存入缓冲区。由于dst是的参数是引用传递,相当只传递了一个指针进来。并没有读取整个缓冲区。
      

  5.   

    java API上说:换句话说,调用此方法的形式为 src.get(dst, off, len),效果与以下循环语句完全相同:      for (int i = off; i < off + len; i++)
             dst[i] = src.get(); 确实没读取整个缓冲区,但却是从缓冲区开头读起,没法控制起始位置。不过这个“完全相同”表明,该方法也是通过get去逐字节读!
      

  6.   

    可以这样做的吧?//待读取数据的ByteBuffer bb
    ByteBuffer bb = ByteBuffer.allocate(1024);
    //起点位置 begin
    bb.position(begin);
    //终点位置 end
    bb.limit(end);
    //读取
    byte [] b = new byte[end - begin];
    bb.get(b);
      

  7.   

    先调用position(int i)方法,到你想开始的地方,然后开始get,这个是其父类Buffer的方法。感觉你说的是这个问题吧
      

  8.   


    谁说的  我看的源码怎么不是?    public ByteBuffer get(byte[] dst, int offset, int length) {
    checkBounds(offset, length, dst.length);
    if (length > remaining())
        throw new BufferUnderflowException();
    int end = offset + length;
    for (int i = offset; i < end; i++)
        dst[i] = get();
    return this;
        }从偏移量开始读的啊