连续两次调用Buffer.flip()有问题吗?

时间:2014-01-07 21:26:52

标签: java

翻转设置限制位置然后定位为0.

如果您拨打两次翻转,限制是否设置为0?有时我不知道接受缓冲区的方法是否应该负责翻转缓冲区,或者方法调用者是否应该这样做。我希望能够在方法中调用.flip只是因为方法调用者没有这样做。但这会导致问题吗?

2 个答案:

答案 0 :(得分:1)

如果要将缓冲区的位置和限制指定为0,则可以两次调用翻转。
但是你应该调用position和limit方法而不是两次调用flip 因为使用翻转,清除或倒带方法是为了达到典型目的,除非你想完成这些目的,否则你应该避免使用这个网格。

我引用javadoc:

清除,翻转和倒带

除了访问位置,限制和容量的方法  值以及标记和重置,此类还定义以下内容  对缓冲区的操作:

  • clear()为新的序列做好准备    通道读取或相对放置操作:它设置限制    容量和位置为零。

  • flip()为新的序列做好准备    channel-write或relative get 操作:它设置限制为    当前位置然后将位置设置为零。

  • rewind()准备好重新读取数据的缓冲区    它已经包含:它保持不变的限制并设置位置    为零。

答案 1 :(得分:1)

是的,这是有问题的。不要这样做。

我发现最好将缓冲区保持在准备好读取的状态。这样每个人都知道预期的内容。因此,flip / get / compact或flip / write / compact应该在需要的地方非常本地应用。