2011-09-16 8 views

答えて

1

.force()または.getFD.sync()

更新のいずれか使用して...非常に素朴な質問されることがあります。あなたは(それが一般的にNIOだった)のSocketChannelのより具体的にあなたの質問を更新しているので、私を参照してください、代わりに返信してください。

+1

はい。しかし、これはFileChannelのためのものです。私はSocketChannelと同じ機能が必要です。 – DeepNightTwo

+0

SocketChannelをフラッシュできません。代わりに、データが完全に送信されていることを確認する必要があります。 – datalost

+0

ありがとうございます。これも助けになります:)。あなたは、Java NIOを知るためのリンクやブックをお勧めします。再度、感謝します! – DeepNightTwo

4

データをディスクに強制すると、OSはディスクにデータが正常に書き込まれたと判断できます。しかし、TCP通信はより複雑で、データはOSesの制御外の多くの段階を通過します。一般に、OSはできるだけ早くデータを終了し、ディスク書き込みをバッファする程度(通常は約64KB)のソケットデータ(通常はGB)をバッファしません。

データが正常に受信された場合、相手側に応答を送信することです。

データをできるだけ早く送信したい場合は、nagleをオフにすることができますが、ほとんどのOSはこれを最適化するのにはかなりスマートで、オフにしてもそれほど大きな違いはありません。

+0

詳細をありがとう! – DeepNightTwo

7

OutputStream.flush()BufferedOutputStreamまたはObjectOutputStreamまたはPrintStreamのバッファをフラッシュする以外は何もしません。

具体的には、FileChannel.force()またはgetFD().sync()に対応するものは実行しません。ストリームバッファをJVMから(この場合は)カーネル内のソケット送信バッファにフラッシュするだけです。

SocketChannel.write()このようなバッファリングはまったく必要ありません。カーネル内のソケット送信バッファに直接移動します。したがって、フラッシュするものは何もないので、フラッシュ操作はありません。

+0

ありがとう! NIOについてもっと学んだ:-) – DeepNightTwo

関連する問題