2009-04-19 7 views
1

タイムアウトを使ってjava.io.InputStreamから読み込みたいとします。どうやらこれを行う正しい方法は、java.nio.channels.SelectableChannelとjava.nio.channels.Selectorを使用することです。残念ながら、InputStreamからSelectableChannelに移動する方法は明確ではありません。 http://java.sun.com/products/javacomm/reference/api/javax/comm/CommPort.html#getInputStream()InputStreamからSelectableChannelを取得する方法は?

+2

残念ですが、それはjavax.commで動作しません。独自の選択可能なチャンネルを実装するためにrxtxプロジェクトをハックできるかもしれませんが、*任意の* SelectableChannelで既に動作するパッケージと統合しようとしているのでなければ、ノンブロッキングシリアルI/O。 – erickson

+1

どのように新しいSelectableChannelを実装しますか? RXTXがどのように独自の実装を提供できるかははっきりしていません。 – Gili

答えて

2

が全てInputStream sは選択であることが保証されるわけではないので、これを行うには簡単な方法はありません -

はInputStreamが非従来のソースから来ています。 CommPortクラスにはSelectableChannelを返すメソッドがないことは残念です。これを達成するための(すなわち、カプセル化を完全に破ることなく)容易でポータブルな方法は存在しない。

1

NIOはこの点で壊れています。あなたがしなければならないことは、コードをちょっと見て、チャンネルにSocketChannelなどを要求するすべてのキャストを見ることだけです。NIOで何かを再利用することはできないような別のタイプのファイル記述子ベースのI/Oチャンネルにはできません。

最後に、これを一般的な再利用のために修正する計画はないと私は尋ねました。

関連する問題