ByteBuffer get(byte[] dst)
相对批量 get 方法。 ByteBuffer get(byte[] dst, int offset, int length)
相对批量 get 方法。 abstract byte get(int index)
绝对 get 方法。 上面内容来自于java API文档,请问什么是“绝对”方法,什么是“相对”方法?以上三个方法要么只读取一个字节,要么读取全部字节。我想读取部分字节,怎么做到?用第三个方法去实现?那样会不会效率太低了?
相对批量 get 方法。 ByteBuffer get(byte[] dst, int offset, int length)
相对批量 get 方法。 abstract byte get(int index)
绝对 get 方法。 上面内容来自于java API文档,请问什么是“绝对”方法,什么是“相对”方法?以上三个方法要么只读取一个字节,要么读取全部字节。我想读取部分字节,怎么做到?用第三个方法去实现?那样会不会效率太低了?
取得全部
ByteBuffer get(byte[] dst, int offset, int length)
读取部分字节啊相对是指相对于dst中的某一个或某些abstract byte get(int index)
绝对是指取得指定的位置的某个byte
这里面的offset和length指的是dst而不是ByteBuffer,它读取的还是整个缓冲区字节。目前看只能通过abstract byte get(int index)一个字节一个字节读,1K的数据要读上1000多次,这效率不敢想像啊!
ByteBuffer test = get(dst,5,10);
意思是取从第5个字节读取10个长度byte,存入缓冲区。由于dst是的参数是引用传递,相当只传递了一个指针进来。并没有读取整个缓冲区。
dst[i] = src.get(); 确实没读取整个缓冲区,但却是从缓冲区开头读起,没法控制起始位置。不过这个“完全相同”表明,该方法也是通过get去逐字节读!
ByteBuffer bb = ByteBuffer.allocate(1024);
//起点位置 begin
bb.position(begin);
//终点位置 end
bb.limit(end);
//读取
byte [] b = new byte[end - begin];
bb.get(b);
谁说的 我看的源码怎么不是? 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;
}从偏移量开始读的啊