Java IOでは、OutputStream
はflush()
メソッドを使用して、データが一度に送信されることを確認できます。Java NIOでSocketChannelをフラッシュする方法は?
SocketChannel
のJava NIOに対応する機能はありますか?私が知る限り、FileChannel
のデータをフラッシュする方法はforce()
です。
Java IOでは、OutputStream
はflush()
メソッドを使用して、データが一度に送信されることを確認できます。Java NIOでSocketChannelをフラッシュする方法は?
SocketChannel
のJava NIOに対応する機能はありますか?私が知る限り、FileChannel
のデータをフラッシュする方法はforce()
です。
が.force()
または.getFD.sync()
更新のいずれか使用して...非常に素朴な質問されることがあります。あなたは(それが一般的にNIOだった)のSocketChannelのより具体的にあなたの質問を更新しているので、私を参照してください、代わりに返信してください。
データをディスクに強制すると、OSはディスクにデータが正常に書き込まれたと判断できます。しかし、TCP通信はより複雑で、データはOSesの制御外の多くの段階を通過します。一般に、OSはできるだけ早くデータを終了し、ディスク書き込みをバッファする程度(通常は約64KB)のソケットデータ(通常はGB)をバッファしません。
データが正常に受信された場合、相手側に応答を送信することです。
データをできるだけ早く送信したい場合は、nagleをオフにすることができますが、ほとんどのOSはこれを最適化するのにはかなりスマートで、オフにしてもそれほど大きな違いはありません。
詳細をありがとう! – DeepNightTwo
OutputStream.flush()
BufferedOutputStream
またはObjectOutputStream
またはPrintStream
のバッファをフラッシュする以外は何もしません。
具体的には、FileChannel.force()
またはgetFD().sync()
に対応するものは実行しません。ストリームバッファをJVMから(この場合は)カーネル内のソケット送信バッファにフラッシュするだけです。
SocketChannel.write()
このようなバッファリングはまったく必要ありません。カーネル内のソケット送信バッファに直接移動します。したがって、フラッシュするものは何もないので、フラッシュ操作はありません。
ありがとう! NIOについてもっと学んだ:-) – DeepNightTwo
はい。しかし、これはFileChannelのためのものです。私はSocketChannelと同じ機能が必要です。 – DeepNightTwo
SocketChannelをフラッシュできません。代わりに、データが完全に送信されていることを確認する必要があります。 – datalost
ありがとうございます。これも助けになります:)。あなたは、Java NIOを知るためのリンクやブックをお勧めします。再度、感謝します! – DeepNightTwo