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 に答える