1.
clear 和 compact 的区别 clear 会将未读取的数据遗忘,但是compact不会遗忘,而是打包整合在一起
如果Buffer中仍有未读的数据,且后续还需要这些数据,但是此时想要先先写些数据,那么使用compact()方法
假设buffer的容量是10 ,写入四个。读取2个,clear会导致position成为0,但是compact会将position设置为2.打印buffer的关键参数为:
position:2#remaining:8#limit:10#capacity:10########
clear的结果是:position:0#remaining:10#limit:10#capacity:10########
2.equals和compareTo
当满足下列条件时,表示两个Buffer相等:
- 有相同的类型(byte、char、int等)。
- Buffer中剩余的byte、char等的个数相等。
- Buffer中所有剩余的byte、char等都相同。
如你所见,equals只是比较Buffer的一部分,不是每一个在它里面的元素都比较。实际上,它只比较Buffer中的剩余元素。
compareTo:
compareTo()方法比较两个Buffer的剩余元素(byte、char等), 如果满足下列条件,则认为一个Buffer“小于”另一个Buffer:
- 第一个不相等的元素小于另一个Buffer中对应的元素 。
- 所有元素都相等,但第一个Buffer比另一个先耗尽(第一个Buffer的元素个数比另一个少)。
rewind:
Buffer.rewind()将position设回0,所以你可以重读Buffer中的所有数据。limit保持不变,仍然表示能从Buffer中读取多少个元素(byte、char等)。
ByteBuffer.wrap
类似于一个工具,快速的将一个数组转换为ByteBuffer