ByteBuffer的初始“模式”是什么?

时间:2015-06-20 16:44:30

标签: java nio bytebuffer

在研究ByteBuffer类时,我开始考虑一个包含ByteBuffer的数组,它可以构造如下:

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

我认为,可能会将我的字节数组的前4个字节作为int值检索。然而,当我进一步研究时,我似乎发现ByteBuffer有两个模式,它们是读写的,我们可以使用flip()方法在它们之间翻转 。但是,由于翻转基本上是一个切换,所以它预先假定一个人知道初始值,以便在读写状态之间进行有意义的翻转。

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

  • 写?
  • 读?
  • 如何创建它的函数(例如,allocate vs wrap)?

1 个答案:

答案 0 :(得分:3)

严格地说,ByteBuffer本身不会跟踪它是“读”还是“写”;这仅仅是它如何使用的一个功能。 ByteBuffer可以随时读写。我们之所以说翻转切换“模式”是因为它是写入缓冲区,翻转它,然后从缓冲区读取的常见任务的一部分。

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