2

这就是我的意思:

put 512 bytes
SocketChannel#write(this data)
start at the beginning and put 512 bytes again
rinse & repeat

我仍在尝试掌握 ByteBuffers 并且我尝试过使用ByteBuffer#reset(),但我总是得到一个 InvalidMarkException,即使这似乎是正确的解决方案(除非我错了,我不会感到惊讶!)

谢谢!

编辑:具体来说,我正在尝试实现同样的效果,除了我想以 512 字节的块而不是批量发送它。 http://privatepaste.com/1fb0e6df07

4

1 回答 1

5

不,reset()这不是正确的方法。它用于“回滚”流或缓冲区,并不是所有的都支持它(在大多数情况下它不是很有用)。从javadoc:

将此缓冲区的位置重置为先前标记的位置。

您可以使用该clear()方法完全清除缓冲区(即将位置设置为零并开始在其中写入更多数据)。

于 2013-08-27T09:10:03.477 回答