nio Buffer的capacity,position,limit的3个属性说明:
- capacity:Buffer的内存固定的一个大小值,一般创建Buffer时初始化写入-->ByteBuffer.allocate(capacity),需注意写入数据时需考虑数据大小是否超过Buffer的大小,如果超过需对Buffer进行扩容。
- position和limit都分读和写2种情况:
- position在读和写情况的分析:
1)写数据到Buffer中时,position表示写入数据的当前位置。position的初始值为0.当一个byte、long等数据写到Buffer后, position会向下移动到下一个可插入数据的Buffer单元。position最大可为capacity – 1(因为position的初始值为0).
2)读数据到Buffer中时,position表示读入数据的当前位置,如position=2时表示已开始读入了3个byte,或从第3个byte开始读取。通过ByteBuffer.flip()切换到读模式时position会被重置为0,当Buffer从position读入数据后,position会下移到下一个可读入的数据Buffer单元。 - limit在读和写情况的分析:
1)写数据时,limit表示可对Buffer最多写入多少个数据。
2)读数据时,limit表示Buffer里有多少可读数据(not null的数据),因此能读到之前写入的所有数据(limit被设置成已写数据的数量,这个值在写模式下就是position)
时间: 2024-08-27 03:36:18