上一节中基本上已经介绍过buffer的核心部分,本节介绍buffer的几种很常用的api
初始化一个缓冲区,大小为1024byte ByteBuffer buf = ByteBuffer.allocate(1024);
第一种:int bytesRead = fileChannel.read(buf); 第二种:buf.put(2);
//read from buffer into channel. int bytesWritten = inChannel.write(buf); //直接读取 byte aByte = buf.get();
/**
* Sets this buffer's mark at its position.
*/
public Buffer mark() {
mark = position;
return this;
}
/**
* Resets this buffer's position to the previously-marked position.
* <p> Invoking this method neither changes nor discards the mark's
* value. </p>
* @return This buffer
* @throws InvalidMarkException
* If the mark has not been set
*/
public Buffer reset() {
int m = mark;
if (m < 0)
throw new InvalidMarkException();
position = m;
return this;
}
使用场景
buffer.mark();//标记当前的位置 buffer.get() //中间可能读取一些数据,然后又想从标记位置再次读取 buffer.reset(); //回到标记位置,就可再次读取
它们的类型相同(byte,char,int等)
它们在缓冲区中具有相同数量的剩余字节,字符等。
所有剩余的字节,字符等都相等。
equals仅比较缓冲区的一部分,而不是它内部的每个元素。 实际上,它只是比较缓冲区中的其余元素。compareTo()方法比较两个缓冲区的剩余元素(字节,字符等)。 在下列情况下,缓冲区被视为“小于”另一个缓冲区:
1、与另一个缓冲区中的对应元素相等的第一个元素小于另一个缓冲区中的元素。
2、 所有元素都相等,但第一个缓冲区在第二个缓冲区之前耗尽了元素(它有更少的元素)。