ByteBuffer的初始"mode"是什么?

What is the initial "mode" of ByteBuffer?

在研究 ByteBuffer class 时,我想到了一个数组包装的 ByteBuffer,其构造如下:

byte data[] = new byte[10];
// Populate data array
ByteBuffer myBuffer = ByteBuffer.wrap(data);
int i = myBuffer.getInt();

我想,这可能会检索我的字节数组的前 4 个字节作为 int 值。然而,当我进一步研究时,我似乎发现 ByteBuffer 有两个 modes ,它们是 read 和 write ,我们可以 flip 在它们之间使用flip() 方法。然而,由于翻转基本上是一个切换,它预先假设知道初始值以在读取和写入状态之间有意义地翻转。

ByteBuffer 的初始状态的定义是什么?

严格来说,ByteBuffer 本身不会跟踪它是 "read" 还是 "write";这只是它如何使用的函数。一个 ByteBuffer 可以随时读写。我们说翻转切换 "mode" 的原因是因为它是写入缓冲区、翻转缓冲区然后从缓冲区读取的常见任务的一部分。

确实,allocate 和 wrap 都将限制和容量设置为等于数组大小,并将位置设置为零。这意味着读取操作最多可以读取整个数组,而写入操作可以填充整个数组。因此,您可以使用新分配或包装的 ByteBuffer 进行读取或写入。