javaNIOByteBuffer - juedaiyuer/researchNote GitHub Wiki

#NIO-ByteBuffer#

正常的应用场景是:往ByteBuffer里写一些数据,然后flip(),然后再读出来

##创建ByteBuffer##

ByteBuffer buffer = ByteBuffer.allocate(n);

##flip##

// 将缓存区准备为数据传出状态
buffer.flip()

// JDK中flip方法代码如下
public final Buffer flip() {
	limit = position;
	position = 0;
	mark = -1;
	return this;
}

##清除缓冲区##

// 并没有清空缓冲区中的数据
// 而是重置了对象中的三个索引值
buffer.clear();

// JDK中clear方法代码如下
public final Buffer clear() {
	position = 0;
	limit = capacity;
	mark = -1;
	return this;
}

##判断缓冲区是否有可用数据##

ByteBuffer.hasRemaining();

// JDK中的代码
public final boolean hasRemaining() {
	return position < limit;
}

##compact()##

// JDK中compact
public ByteBuffer compact() {
	System.arraycopy(hb, ix(position()), hb, ix(0), remaining());
	position(remaining());
	limit(capacity());
	return this;
}


// JDK中的remaining()方法
public final int remaining() {
	return limit - position;
}

##套接字通道(信道)读写数据##

// 读取数据
int bytesRead = socketChannel.read(buffer);

//写入数据
socketChannel.write(buffer);

##source##