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

时间:2013-08-27 09:05:37

标签: java nio bytebuffer

这就是我的意思:

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

1 个答案:

答案 0 :(得分:5)

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

  

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

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