NIOのDatagramChannelを使用して、私は部分的に読み出し/書き込みパケットを処理する必要があるでしょうか?
質問
たSocketChannelを使用する場合は、
、あなたは部分的書き込みと読み込みを処理するために、読み取りおよび書き込みバッファを保持する必要があります。
私はのDatagramChannelを使用しているとき、それは必要とされない可能性があることしつこい疑いを持っていますが、情報が不足している。
物語は何ですか?
私は、すべての待機中のデータグラムを読み取るために戻ってヌルを取得するまで繰り返し(のByteBuffer)を受信(非ブロッキング)を呼び出す必要がありますか?
非ブロックモードで送信する場合は、、私はバッファ全体を送信したり、それを完全に拒否するか送信(ByteBufferの、のSocketAddress)に頼ることができる、または私はおそらく部分的に書き込まれたバッファを維持する必要があるのですか?
解決
データグラムのすべての読み取りはデータグラム全体、より多くの何もない、何も少ないです。これはjava.nio.DatagramChannel.readの説明の場合であるというヒントがあります:
あなたがたSocketChannelを扱っている場合は、より多くのバイトがしてある場合 データグラム与えられたにとどまるよりも、 その後、バッファの残りの部分 データグラムを黙って破棄されます。
は、メッセージ・ストリームです。 TCPは、他の側からのメッセージを再作成するために別々のパケットを再組み立てされたとおりに、各読み取りに取得しますどのくらいか、どのように少しのデータ保証はありません。しかし、(あなたがのDatagramChannelと読んでいるものです)UDPのために、各パケットには、独自のアトミックメッセージです。
所属していません StackOverflow