Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[JavaHouse-Brewers:18515] Re: Socket のファイルディスクリプタについて

63 views
Skip to first unread message

tak...@etl.go.jp

unread,
Aug 9, 1998, 3:00:00 AM8/9/98
to JavaHouse Brewers ML
> >  現在、Socket オブジェクトのファイルディスクリプタの値を取得
> >  しようとしています。
> >  調べましたところ、Socketクラスには、ファイルディスクリプタの
> >  値を取得するためのメソッドはないのですが、SocketImplと言うク
> >  ラスには、getFileDescriptor()メソッドがあり、Socketのファイル
> >  ディスクリプタの値を返してくれる様です。
>
> UNIXやそれを参考にしている実装では、ソケットには対応するファイル
> ディスクリプタがありますが、必ずしもあらゆる実装で、ソケットにファ
> イルディスクリプタが対応するとは限りません。

でも、java.io.FileInput/OutputStream あたりを読むと FileDescriptor は
不可欠なようです。

> 実際、今仕事で使っているプラットフォーム(組み込み用OS)では、ソケッ
> トはありますが、ファイルディスクリプタとは縁がありません。読み書き
> にはソケット専用のAPIを使っています。

その場合でも、一つ一つのソケットに対応した何らかの番号があるはずで、
その番号をそのOSにおける FileDescriptor として実装されるのではないで
しょうか。

> ちなみに、SocketクラスのSocketImplは、抽象クラスで、プラットフォー
> ムごとに異なるソケット関連の実装を隠蔽しています。
> ※ Bridgeパターン。

Bridgeパターンの目的は実装の隠蔽(外から使えなくする)というよりも (隠蔽
(外から使えなくする)だけなら private/protected にすればよい)、実装の多
様性とは独立したインターフェイスの拡張を可能にすることにあります。
Socket - SocketImpl の場合ですと、
例えば、実装としてPlainSocketの他にHttpTunnelSocketなどをサブクラスと
して用意するとしたとき、一方でインターフェイスを拡張したSSLSocketなど
を用意したい場合に、両方をSocketのサブクラスとして作ろうとすると、
PlainSocket, HttpTunnelSocket, PlainSSLSocket, HttpTunnelSSLSocketと、
直交する拡張の組み合わせだけの数のサブクラス化が必要になってしまいます。
これを避け、PlainSocketとHttpTunnelSocketをSocketImplのサブクラスに、
SSLSocketをSocketのサブクラスにする、というのがBridgeパターンです。

高木 浩光@電子技術総合研究所
http://www.etl.go.jp/~takagi/ (工事中)

0 new messages