如何重新使用ByteBuffer将多个512字节块写入套接字?

con*_*vis 2 java nio bytebuffer

这就是我的意思:

put 512 bytes
SocketChannel#write(this data)
start at the beginning and put 512 bytes again
rinse & repeat
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

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

Kay*_*man 5

不,reset()不是正确的方法.它用于"回滚"流或缓冲区,并非所有它都支持它(在大多数情况下它并不是非常有用).来自javadoc:

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

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