ByteBuffer 类的 rewind() 和 clear() 有啥区别?
Posted
技术标签:
【中文标题】ByteBuffer 类的 rewind() 和 clear() 有啥区别?【英文标题】:What is the difference between rewind() and clear() of class ByteBuffer?ByteBuffer 类的 rewind() 和 clear() 有什么区别? 【发布时间】:2014-08-09 14:50:32 【问题描述】:请注意,在 JDK 文档中,rewind()
和 clear()
在“清理”ByteBuffer
时看起来很相似。其实旧数据是存在的,而且rewind()
应该在channel-write或者get操作之前使用,clear()
对应channel-read或者put操作。
我对给定的描述感到困惑。这些地球上的对应物有什么区别?
【问题讨论】:
【参考方案1】:不同之处在于clear
将限制重置为容量,因此为要写入(和由您读取)的其他数据准备缓冲区,而rewind
不会对限制做任何事情,因此您的数据可以再读一遍。
【讨论】:
你的意思是倒带不是缓冲区清理,只是准备缓冲区读取操作? 这两种方法实际上都不会清除缓冲区内的数据。只有部分指标发生变化。【参考方案2】:1) 这里是 clear() 方法:
public final Buffer clear()
position = 0;
limit = capacity;
mark = -1;
return this;
clear() 方法重置缓冲区 为空状态。它不会更改缓冲区的任何数据元素,而只是设置 限制容量和位置回到0
2) 这里是 rewind() 方法:
public final Buffer rewind()
position = 0;
mark = -1;
return this;
您可以使用 rewind( ) 返回并重新读取缓冲区中的数据 被翻转。如您所见:它不会改变限制。有时,从缓冲区读取数据后,您可能想再次读取它,rewind() 是您的正确选择。
【讨论】:
以上是关于ByteBuffer 类的 rewind() 和 clear() 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章