このトピックに関するいくつかの質問があることがわかりましたが、それは数年前か非常に精巧ではありません。Java Non-Blocking IO ObjectStream
私は以前のアプリケーションをSocket
の新しいNIO SocketChannel
に移行していました。なぜなら、それは不安定な状態で動作していたため、もう一度(コードレビューの一環として)この作業を行うつもりだったからです。だから私は非ブロッキングSocketChannel
を使用していて、ちょうどObjectInputStream
とObjectOutputStream
を使うことができないことを知りました。 明らかに、SocketChannelには転送されるデータのサイズが必要です。
この問題の解決方法はありますか?おそらくテンプレートが使えるのでしょうか、またはベストプラクティスとして一般的に承認されているソリューションですか(パターン)?私がちょうどとObjectOutputStream
を利用できるという事実は、すべてをもっと簡単にしました。独自の実装を作成する必要がある場合、おそらくあまりにも多くの時間を必要とし、より安定させるためにアプリケーションで多くのことを壊すでしょう。要約で
質問:
- 非ブロック
SocketChannel
にObjectInputStream
とObjectOutputStream
を使用するための一般的な解決策はありますか? - ノンブロッキングモードで着信接続を受け入れるようなハイブリッドを作ることもできます。セレクタが読み込むものがあると分かったら、それはブロッキングモードに変わりますか? (私はそれがひどいと思うけど、私はちょっと必死です。)
PS:Java 8を使用し、それはTCP-Streamです。
NIOに移行することは、不安定性の問題を解決するものではありません。あなたはほとんど確実にそれを悪化させます。元の問題を解決して、新しいコードを書いてはいけません。 – EJP
@EJPの移行は、不安定性の問題を解決するものではありませんでした。主にすべてをより効率的にすることです。 「古い」実装の部分をレビューすることに努力するのではなく、全体をより良くするために努力していました。とにかく遅かれ早かれNIOに移行しようとしていたので(それが計画でした)。 –
あなたの質問は、私が言及したことを正確に言う:「不安定性の問題のため」。いずれにしても、NIOを使用することによるスピードアップのメリットはほとんどありません。オブジェクトストリームとの統合は非常に困難です。私はあなたがしないことをお勧めします。強く – EJP