- すべての実装されたインタフェース:
Closeable
,AutoCloseable
,ByteChannel
,Channel
,GatheringByteChannel
,InterruptibleChannel
,NetworkChannel
,ReadableByteChannel
,ScatteringByteChannel
,WritableByteChannel
public abstract class SocketChannel extends AbstractSelectableChannel implements ByteChannel, ScatteringByteChannel, GatheringByteChannel, NetworkChannel
ソケット・チャネルは、このクラスのopen
メソッドの1つを呼び出すことによって作成されます。 任意の既存のソケット用にチャネルを作成することはできません。 新しく作成されたソケット・チャネルはオープンですが、接続は確立されていません。 未接続のチャネルに対して入出力操作を呼び出そうとすると、NotYetConnectedException
がスローされます。 ソケット・チャネルを接続するには、connect
メソッドを呼び出します。接続されたソケット・チャネルは、クローズするまで接続されたままになります。 ソケット・チャネルが接続されているかどうかは、isConnected
メソッドの呼出しによって判断できます。
ソケット・チャネルは非ブロック接続をサポートします。ソケット・チャネルの作成とリモート・ソケットへのリンクの確立プロセスはconnect
メソッドによって開始され、後でfinishConnect
メソッドによって完了します。 接続操作が実行中であるかどうかは、isConnectionPending
メソッドの呼出しによって判断できます。
ソケット・チャネルは、Channel
クラスに指定されている非同期クローズ操作とよく似た非同期停止をサポートします。 一方のスレッドがソケットのチャネルに対する読込み操作の途中でブロックされているのに、もう一方のスレッドがソケットの入力側を停止した場合、ブロックされたスレッドの読込み操作は、バイトを一切読み取ることなく終了し、-1
を返します。 一方のスレッドがソケットのチャネルに対する書込み操作の途中でブロックされているのに、もう一方のスレッドがソケットの出力側を停止した場合、ブロックされたスレッドはAsynchronousCloseException
を受け取ります。
ソケット・オプションはsetOption
メソッドを使用して構成されます。 ソケット・チャネルでは次のオプションがサポートされます。
追加(実装固有)のオプションをサポートできる場合もあります。
オプション名 説明 SO_SNDBUF
ソケット送信バッファのサイズ SO_RCVBUF
ソケット受信バッファのサイズ SO_KEEPALIVE
接続をキープアライブにします SO_REUSEADDR
アドレスを再利用します SO_LINGER
閉じるときにデータが存在する場合は遅延します(ブロック・モードに構成されている場合のみ) TCP_NODELAY
Nagleアルゴリズムを無効にします
ソケット・チャネルは、複数の並行スレッドで安全に使用できます。 データグラム・チャネルは並行読取りおよび書込みをサポートします。ただし、読取りを行うスレッドも書込みを行うスレッドも特定の時点では常に1個以下です。 connect
メソッドとfinishConnect
メソッドは相互に同期しており、いずれかのメソッドの呼出し中に読み込みまたは書込み操作を開始しようとすると、この処理はその呼出しが完了するまでブロックされます。
- 導入されたバージョン:
- 1.4
-
コンストラクタのサマリー
コンストラクタ 修飾子 コンストラクタ 説明 protected
SocketChannel(SelectorProvider provider)
このクラスの新しいインスタンスを初期化します。 -
メソッドのサマリー
修飾子と型 メソッド 説明 abstract SocketChannel
bind(SocketAddress local)
チャネルのソケットをローカル・アドレスにバインドします。abstract boolean
connect(SocketAddress remote)
このチャネルのソケットを接続します。abstract boolean
finishConnect()
ソケット・チャネルの接続処理を完了します。abstract SocketAddress
getLocalAddress()
このチャネルのソケットがバインドされているソケット・アドレスを返します。abstract SocketAddress
getRemoteAddress()
このチャネルのソケットが接続されているリモート・アドレスを返します。abstract boolean
isConnected()
このチャネルのネットワーク・ソケットが接続されているかどうかを判断します。abstract boolean
isConnectionPending()
このチャネル上で接続操作が進行中かどうかを判断します。static SocketChannel
open()
ソケット・チャネルをオープンします。static SocketChannel
open(ProtocolFamily family)
ソケット・チャネルをオープンします。static SocketChannel
open(SocketAddress remote)
ソケット・チャネルをオープンし、リモート・アドレスに接続します。abstract int
read(ByteBuffer dst)
このチャネルのバイト・シーケンスを指定のバッファに読み込みます。long
read(ByteBuffer[] dsts)
このチャネルのバイト・シーケンスを指定されたバッファに読み込みます。abstract long
read(ByteBuffer[] dsts, int offset, int length)
このチャネルのバイト・シーケンスを指定されたバッファのサブシーケンスに読み込みます。abstract <T> SocketChannel
setOption(SocketOption<T> name, T value)
ソケット・オプションの値を設定します。abstract SocketChannel
shutdownInput()
チャネルを閉じずに読み込むための接続をシャットダウンします。abstract SocketChannel
shutdownOutput()
チャネルを閉じずに書き込むための接続をシャットダウンします。abstract Socket
socket()
このチャネルに関連したソケットを取得します。int
validOps()
このチャネルのサポートされている操作を識別する操作セットを返します。abstract int
write(ByteBuffer src)
このチャネルのバイト・シーケンスを指定のバッファから書き出します。long
write(ByteBuffer[] srcs)
このチャネルのバイト・シーケンスを指定されたバッファから書き出します。abstract long
write(ByteBuffer[] srcs, int offset, int length)
このチャネルのバイト・シーケンスを指定されたバッファのサブシーケンスから書き出します。クラス java.nio.channels.spi.AbstractSelectableChannelで宣言されたメソッド
configureBlocking, implCloseChannel, implCloseSelectableChannel, implConfigureBlocking, provider, register
クラス java.nio.channels.SelectableChannelで宣言されたメソッド
blockingLock, isBlocking, isRegistered, keyFor, register
クラス java.nio.channels.spi.AbstractInterruptibleChannelで宣言されたメソッド
begin, close, end
クラス java.lang.Objectで宣言されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
インタフェース java.nio.channels.NetworkChannelで宣言されたメソッド
getOption, supportedOptions
-
コンストラクタの詳細
-
SocketChannel
protected SocketChannel(SelectorProvider provider)このクラスの新しいインスタンスを初期化します。- パラメータ:
provider
- このチャネルの作成元プロバイダ
-
-
メソッドの詳細
-
open
public static SocketChannel open() throws IOExceptionソケット・チャネルをオープンします。システム全体のデフォルト
SelectorProvider
オブジェクトのopenSocketChannel
メソッドを呼び出すことで、新しいチャネルが作成されます。- 戻り値:
- 新しいソケット・チャネル
- 例外:
IOException
- 入出力エラーが発生した場合
-
open
public static SocketChannel open(ProtocolFamily family) throws IOExceptionソケット・チャネルをオープンします。family
パラメータは、チャネル・ソケットのprotocol family
を指定します。新しいチャネルは、システム全体のデフォルトの
openSocketChannel(ProtocolFamily)
メソッドを呼び出すことで作成されます。SelectorProvider
object.- パラメータ:
family
- プロトコル・ファミリ- 戻り値:
- 新しいソケット・チャネル
- 例外:
UnsupportedOperationException
- 指定されたプロトコル・ファミリがサポートされていない場合。 たとえば、パラメータにStandardProtocolFamily.INET6
が指定されているが、IPv6がプラットフォームで有効になっていないとします。IOException
- 入出力エラーが発生した場合- 導入されたバージョン:
- 15
-
open
public static SocketChannel open(SocketAddress remote) throws IOExceptionソケット・チャネルをオープンし、リモート・アドレスに接続します。この簡易メソッドは、
open()
メソッドを呼び出して結果のソケット・チャネルに対してconnect
メソッドを呼び出し、これをremote
に渡して、そのチャネルを返した場合と同じように機能します。- パラメータ:
remote
- 新しいチャネルの接続先リモート・アドレス- 戻り値:
- 新しい、接続されたソケット・チャネル
- 例外:
AsynchronousCloseException
- 接続操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 接続操作の進行中に別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合UnresolvedAddressException
- 指定されたリモート・アドレスが完全に解決されない場合UnsupportedAddressTypeException
- 指定されたリモート・アドレスのタイプがサポート対象外の場合SecurityException
- セキュリティ・マネージャがインストールされていて、指定されたリモート・エンドポイントへのアクセスが許可されていない場合IOException
- その他の入出力エラーが発生した場合
-
validOps
public final int validOps()このチャネルのサポートされている操作を識別する操作セットを返します。ソケット・チャネルでは、接続、読取りおよび書込みがサポートされるため、このメソッドは
(
SelectionKey.OP_CONNECT
|
SelectionKey.OP_READ
|
SelectionKey.OP_WRITE
)
を返します。- 定義:
validOps
、クラス:SelectableChannel
- 戻り値:
- 有効な操作セット
-
bind
public abstract SocketChannel bind(SocketAddress local) throws IOExceptionインタフェースからコピーされた説明:NetworkChannel
チャネルのソケットをローカル・アドレスにバインドします。このメソッドは、ソケットとローカル・アドレスとの間の関連付けを確立するために使用されます。 関連付けが確立されると、ソケットはチャネルが閉じられるまでバインドされたままになります。
local
パラメータの値がnull
の場合、ソケットは自動的に割り当てられるアドレスにバインドされます。- 定義:
bind
、インタフェース:NetworkChannel
- パラメータ:
local
- ソケットのバインド先のアドレス、または自動的に割り当てられるソケット・アドレスにソケットをバインドする場合はnull
- 戻り値:
- このチャネル
- 例外:
ConnectionPendingException
- このチャネルですでに非ブロック接続操作が実行中である場合AlreadyBoundException
- ソケットがすでにバインドされている場合UnsupportedAddressTypeException
- 指定されたアドレスのタイプがサポート対象外の場合ClosedChannelException
- チャネルがクローズしている場合IOException
- その他の入出力エラーが発生した場合SecurityException
- セキュリティ・マネージャがインストールされていて、checkListen
メソッドが操作を拒否した場合- 導入されたバージョン:
- 1.7
- 関連項目:
NetworkChannel.getLocalAddress()
-
setOption
public abstract <T> SocketChannel setOption(SocketOption<T> name, T value) throws IOExceptionインタフェースからコピーされた説明:NetworkChannel
ソケット・オプションの値を設定します。- 定義:
setOption
、インタフェース:NetworkChannel
- 型パラメータ:
T
- ソケット・オプション値のタイプ- パラメータ:
name
- ソケット・オプションvalue
- ソケット・オプションの値。 一部のソケット・オプションに対しては、null
の値が有効な値である場合があります。- 戻り値:
- このチャネル
- 例外:
UnsupportedOperationException
- チャネルがソケット・オプションをサポートしていない場合IllegalArgumentException
- 値がこのソケット・オプションに対して有効な値でない場合ClosedChannelException
- このチャネルがクローズしている場合IOException
- 入出力エラーが発生した場合- 導入されたバージョン:
- 1.7
- 関連項目:
StandardSocketOptions
-
shutdownInput
public abstract SocketChannel shutdownInput() throws IOExceptionチャネルを閉じずに読み込むための接続をシャットダウンします。読取り用にシャットダウンしたあとに、さらにそのチャネルで読取りを行うと、ストリームの終わりを示す
-1
が返されます。 接続の入力側がすでにシャットダウンされている場合は、このメソッドを呼び出しても何の効果もありません。- 戻り値:
- そのチャネル
- 例外:
NotYetConnectedException
- このチャネルがまだ接続されていない場合ClosedChannelException
- このチャネルがクローズしている場合IOException
- その他の入出力エラーが発生した場合- 導入されたバージョン:
- 1.7
-
shutdownOutput
public abstract SocketChannel shutdownOutput() throws IOExceptionチャネルを閉じずに書き込むための接続をシャットダウンします。書込み用にシャットダウンしたあとに、さらにそのチャネルに書き込もうとすると、
ClosedChannelException
がスローされます。 接続の出力側がすでにシャットダウンされている場合は、このメソッドを呼び出しても何の効果もありません。- 戻り値:
- そのチャネル
- 例外:
NotYetConnectedException
- このチャネルがまだ接続されていない場合ClosedChannelException
- このチャネルがクローズしている場合IOException
- その他の入出力エラーが発生した場合- 導入されたバージョン:
- 1.7
-
socket
public abstract Socket socket()このチャネルに関連したソケットを取得します。返されるオブジェクトは、
Socket
クラスで宣言されていないpublicメソッドは宣言しません。- 戻り値:
- このチャネルに関連したソケット
-
isConnected
public abstract boolean isConnected()このチャネルのネットワーク・ソケットが接続されているかどうかを判断します。- 戻り値:
- このチャネルのネットワーク・ソケットが
オープン
で接続されている場合にかぎりtrue
-
isConnectionPending
public abstract boolean isConnectionPending()このチャネル上で接続操作が進行中かどうかを判断します。- 戻り値:
- このチャネル上で接続操作が開始されていて、
finishConnect
メソッドを呼び出すことによってまだ完了していない場合にかぎりtrue
-
connect
public abstract boolean connect(SocketAddress remote) throws IOExceptionこのチャネルのソケットを接続します。このチャネルが非ブロック・モードの場合、このメソッドの呼出しにより、非ブロック接続操作が開始されます。 ローカル接続の場合のように即座に接続が確立される場合、このメソッドは
true
を返します。 それ以外の場合はfalse
を返し、あとでfinishConnect
メソッドを呼び出すことにより、接続操作を完了する必要があります。このチャネルがブロック・モードの場合、このメソッドの呼出しは、接続が確立されるか入出力エラーが発生するまでブロックされます。
このメソッドは、
Socket
クラスとまったく同じセキュリティ・チェックを行います。 つまり、セキュリティ・マネージャがインストールされている場合、このメソッドは、そのcheckConnect
メソッドが指定されたリモート・エンドポイントのアドレスおよびポート番号への接続を許可することを確認します。このメソッドはいつでも呼び出すことができます。 このメソッドを呼び出している途中でこのチャネルに対する読み取りまたは書込み操作を呼び出した場合、最初の呼出しが完了するまで次の呼出しはブロックされます。 接続しようとしたが失敗した場合、つまりこのメソッドの呼出しがチェック例外をスローする場合、チャネルはクローズされます。
- パラメータ:
remote
- このチャネルの接続先リモート・アドレス- 戻り値:
- 接続が確立された場合は
true
、このチャネルが非ブロック・モードで接続操作の実行中である場合はfalse
- 例外:
AlreadyConnectedException
- このチャネルがすでに接続されている場合ConnectionPendingException
- このチャネルですでに非ブロック接続操作が実行中である場合ClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 接続操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 接続操作の進行中に別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合UnresolvedAddressException
- 指定されたリモート・アドレスが完全に解決されない場合UnsupportedAddressTypeException
- 指定されたリモート・アドレスのタイプがサポート対象外の場合SecurityException
- セキュリティ・マネージャがインストールされていて、指定されたリモート・エンドポイントへのアクセスが許可されていない場合IOException
- その他の入出力エラーが発生した場合
-
finishConnect
public abstract boolean finishConnect() throws IOExceptionソケット・チャネルの接続処理を完了します。ソケット・チャネルを非ブロック・モードにし、その
connect
メソッドを呼び出すと、非ブロック接続操作が開始されます。 接続が確立されるか、接続に失敗したあと、ソケット・チャネルは接続可能な状態になります。ここで、接続シーケンスを完了するために、このメソッドが呼び出されます。 接続操作に失敗した場合、このメソッドを呼び出すと適切なIOException
がスローされます。このチャネルがすでに接続されている場合、このメソッドはブロックされ、ただちに
true
を返します。 このチャネルが非ブロック・モードの場合、接続処理がまだ完了していなければ、このメソッドはfalse
を返します。 このチャネルがブロック・モードの場合、接続が完了するか失敗するまでこのメソッドはブロックされます。なお、接続が完了した場合はtrue
が返され、接続に失敗した場合はチェック例外がスローされます。このメソッドはいつでも呼び出すことができます。 このメソッドを呼び出している途中でこのチャネルに対する読み取りまたは書込み操作を呼び出した場合、最初の呼出しが完了するまで次の呼出しはブロックされます。 接続しようとしたが失敗した場合、つまりこのメソッドの呼出しがチェック例外をスローする場合、チャネルはクローズされます。
- 戻り値:
- このチャネルのソケットが接続されている場合にかぎり
true
- 例外:
NoConnectionPendingException
- このチャネルが接続されておらず、接続操作も開始されていない場合ClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 接続操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 接続操作の進行中に別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合IOException
- その他の入出力エラーが発生した場合
-
getRemoteAddress
public abstract SocketAddress getRemoteAddress() throws IOExceptionこのチャネルのソケットが接続されているリモート・アドレスを返します。チャネルがInternet Protocolソケット・アドレスにバインドおよび接続されている場合は、このメソッドからの戻り値の型は
InetSocketAddress
です。- 戻り値:
- リモート・アドレス。チャネルのソケットが接続されていない場合は
null
- 例外:
ClosedChannelException
- チャネルがクローズしている場合IOException
- 入出力エラーが発生した場合- 導入されたバージョン:
- 1.7
-
read
public abstract int read(ByteBuffer dst) throws IOException次のインタフェースからコピーされた説明:ReadableByteChannel
このチャネルのバイト・シーケンスを指定のバッファに読み込みます。チャネルから最大rバイトを読み取ろうとします。rは、このメソッドを呼び出すときにバッファ内に残っているバイト数、
dst.remaining()
になります。長さn (
0
<=
n<=
r)のバイト・シーケンスが読み取られるとします。 このバイト・シーケンスがバッファに転送されるため、シーケンス内の最初のバイトのインデックスはp、最後のバイトのインデックスはp+
n-
1
になります。なお、pは、このメソッドが呼び出されるときのバッファの位置です。 バッファの位置は、終了時にp+
nに等しくなります。リミットに変化はありません。読込み操作によってバッファがいっぱいになるとはかぎりません。バイトが一切読み取られない場合もあります。 バッファがいっぱいになるかどうかは、チャネルの本来の性質と状態によって決定します。 たとえば非ブロック・モードのソケットは、ソケットの入力バッファからただちに取得できるバイト以外を読み取ることができません。同様に、ファイル・チャネルは、ファイル内のバイト以外を読み取ることができません。 ただし、チャネルがブロック・モードであり、バッファ内のバイト数が1バイト以上の場合、1バイト以上が読み取られるまでこのメソッドはブロックされることになっています。
このメソッドはいつでも呼び出すことができます。 ただし、ほかのスレッドがこのチャネルに対して読込み操作を開始している場合、このメソッドの呼出しは最初の操作が終わるまでブロックされます。
- 定義:
read
、インタフェース:ReadableByteChannel
- パラメータ:
dst
- バイトの転送先バッファ- 戻り値:
- 読み取られたバイト数。ゼロの場合もある。チャネルがストリームの終わりに達した場合は
-1
- 例外:
NotYetConnectedException
- このチャネルがまだ接続されていない場合ClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 読取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 読取り操作の進行中に、別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合IOException
- その他の入出力エラーが発生した場合
-
read
public abstract long read(ByteBuffer[] dsts, int offset, int length) throws IOException次のインタフェースからコピーされた説明:ScatteringByteChannel
このチャネルのバイト・シーケンスを指定されたバッファのサブシーケンスに読み込みます。このメソッド呼出しは、このチャネルから最大rバイトを読み取ろうとします。rは、指定されたバッファ配列の指定されたサブシーケンスに残っている合計バイト数です。
(このメソッドの呼び出し時点。)dsts[offset].remaining() + dsts[offset+1].remaining() + ... + dsts[offset+length-1].remaining()
長さn (
0
<=
n<=
r)のバイト・シーケンスが読み取られるとします。 このシーケンスの最初のdsts[offset].remaining()
バイトまではバッファdsts[offset]
に転送され、次のdsts[offset+1].remaining()
バイトまではバッファdsts[offset+1]
に転送されます。バイト・シーケンス全部が指定されたバッファに転送されるまで、この処理が繰り返されます。 各バッファには最大限のバイトが転送されるため、最終更新バッファを除く個々の更新バッファの最終的な位置は、このバッファのリミットと等しくなります。このメソッドはいつでも呼び出すことができます。 ただし、ほかのスレッドがこのチャネルに対して読込み操作を開始している場合、このメソッドの呼出しは最初の操作が終わるまでブロックされます。
- 定義:
read
、インタフェース:ScatteringByteChannel
- パラメータ:
dsts
- バイトの転送先バッファoffset
- 最初のバイトの転送先となるバッファ配列内のオフセット。dsts.length
以下の負でない値length
- アクセスされる最大バッファ数。dsts.length
-offset
以下の負でない値- 戻り値:
- 読み取られたバイト数。ゼロの場合もある。チャネルがストリームの終わりに達した場合は
-1
- 例外:
NotYetConnectedException
- このチャネルがまだ接続されていない場合ClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 読取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 読取り操作の進行中に、別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合IOException
- その他の入出力エラーが発生した場合
-
read
public final long read(ByteBuffer[] dsts) throws IOException次のインタフェースからコピーされた説明:ScatteringByteChannel
このチャネルのバイト・シーケンスを指定されたバッファに読み込みます。このメソッドを
c.read(dsts)
の形式で呼び出した場合、次の呼び出しと同じ結果が得られます。c.read(dsts, 0, dsts.length);
- 定義:
read
、インタフェース:ScatteringByteChannel
- パラメータ:
dsts
- バイトの転送先バッファ- 戻り値:
- 読み取られたバイト数。ゼロの場合もある。チャネルがストリームの終わりに達した場合は
-1
- 例外:
NotYetConnectedException
- このチャネルがまだ接続されていない場合ClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 読取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 読取り操作の進行中に、別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合IOException
- その他の入出力エラーが発生した場合
-
write
public abstract int write(ByteBuffer src) throws IOException次のインタフェースからコピーされた説明:WritableByteChannel
このチャネルのバイト・シーケンスを指定のバッファから書き出します。チャネルに最大rバイトを書き込もうとします。rは、このメソッドを呼び出すときにバッファ内に残っているバイト数、
src.remaining()
になります。長さn (
0
<=
n<=
r)のバイト・シーケンスが書き込まれるとします。 このバイト・シーケンスは、バッファのインデックスpから転送されます。pは、このメソッドが呼び出されるときのバッファの位置です。書き込まれる最後のバイトのインデックスはp+
n-
1
になります。 バッファの位置は、終了時にp+
nに等しくなります。リミットに変化はありません。特に指定がないかぎり、要求されたrバイトがすべて書き込まれると書込み操作は終了します。 チャネルの種類によっては、その状態に応じて、一部のバイトしか書き込まれない場合や、まったく書込みが行われない場合もあります。 たとえば非ブロック・モードのソケット・チャネルでは、ソケットの出力バッファ内のバイト数が最大書込みバイト数になります。
このメソッドはいつでも呼び出すことができます。 ただし、ほかのスレッドがこのチャネルに対して書込み操作を開始している場合、このメソッドの呼出しは最初の操作が終わるまでブロックされます。
- 定義:
write
、インタフェース:WritableByteChannel
- パラメータ:
src
- バイトの取得先バッファ- 戻り値:
- 書き込まれるバイト数。ゼロの場合もある
- 例外:
NotYetConnectedException
- このチャネルがまだ接続されていない場合ClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 書込み操作の進行中に別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 書込み中に別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合IOException
- その他の入出力エラーが発生した場合
-
write
public abstract long write(ByteBuffer[] srcs, int offset, int length) throws IOException次のインタフェースからコピーされた説明:GatheringByteChannel
このチャネルのバイト・シーケンスを指定されたバッファのサブシーケンスから書き出します。このチャネルに最大rバイトを書き込もうとします。rは、指定されたバッファ配列の指定されたサブシーケンスに残っている合計バイト数です。
(このメソッドの呼び出し時点。)srcs[offset].remaining() + srcs[offset+1].remaining() + ... + srcs[offset+length-1].remaining()
長さn (
0
<=
n<=
r)のバイト・シーケンスが書き込まれるとします。 このシーケンスの最初のsrcs[offset].remaining()
バイトまではバッファsrcs[offset]
から書き込まれ、次のsrcs[offset+1].remaining()
バイトまではバッファsrcs[offset+1]
から書き込まれます。バイト・シーケンス全部が書き込まれるまで、この処理が繰り返されます。 各バッファから最大限のバイト数が書き込まれるため、更新された個々のバッファの最終的な位置は、最終更新バッファを除いて、このバッファのリミットと等しくなります。特に指定がないかぎり、要求されたrバイトがすべて書き込まれると書込み操作は終了します。 チャネルの種類によっては、その状態に応じて、一部のバイトしか書き込まれない場合や、まったく書込みが行われない場合もあります。 たとえば非ブロック・モードのソケット・チャネルでは、ソケットの出力バッファ内のバイト数が最大書込みバイト数になります。
このメソッドはいつでも呼び出すことができます。 ただし、ほかのスレッドがこのチャネルに対して書込み操作を開始している場合、このメソッドの呼出しは最初の操作が終わるまでブロックされます。
- 定義:
write
、インタフェース:GatheringByteChannel
- パラメータ:
srcs
- バイトの取得先バッファoffset
- 最初のバイトの取得先となるバッファ配列内のオフセット。srcs.length
以下の負でない値length
- アクセスされる最大バッファ数。srcs.length
-offset
以下の負でない値- 戻り値:
- 書き込まれるバイト数。ゼロの場合もある
- 例外:
NotYetConnectedException
- このチャネルがまだ接続されていない場合ClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 書込み操作の進行中に別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 書込み中に別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合IOException
- その他の入出力エラーが発生した場合
-
write
public final long write(ByteBuffer[] srcs) throws IOException次のインタフェースからコピーされた説明:GatheringByteChannel
このチャネルのバイト・シーケンスを指定されたバッファから書き出します。このメソッドを
c.write(srcs)
の形式で呼び出した場合、次の呼び出しと同じ結果が得られます。c.write(srcs, 0, srcs.length);
- 定義:
write
、インタフェース:GatheringByteChannel
- パラメータ:
srcs
- バイトの取得先バッファ- 戻り値:
- 書き込まれるバイト数。ゼロの場合もある
- 例外:
NotYetConnectedException
- このチャネルがまだ接続されていない場合ClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 書込み操作の進行中に別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 書込み中に別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合IOException
- その他の入出力エラーが発生した場合
-
getLocalAddress
public abstract SocketAddress getLocalAddress() throws IOExceptionこのチャネルのソケットがバインドされているソケット・アドレスを返します。チャネルがInternet Protocolソケット・アドレスに
バインド
されている場合は、このメソッドからの戻り値の型はInetSocketAddress
です。セキュリティ・マネージャが設定されている場合は、セキュリティ・マネージャの
checkConnect
メソッドがローカル・アドレスおよび-1
を引数として呼び出され、操作が許可されるかどうかが確認されます。 この操作が許可されない場合は、ループバック
・アドレスおよびチャネルのソケットのローカル・ポートを表すSocketAddress
が返されます。- 定義:
getLocalAddress
、インタフェース:NetworkChannel
- 戻り値:
- ソケットがバインドされている
SocketAddress
、またはセキュリティ・マネージャによって拒否された場合はループバック・アドレスを表すSocketAddress
、またはチャネルのソケットがバインドされていない場合はnull
- 例外:
ClosedChannelException
- チャネルがクローズしている場合IOException
- 入出力エラーが発生した場合
-