概述
SocketChannel是一个可选中的通道,它提供了连接到socket的局部抽象流。socket()方法返回关联的socket实例。
SocketChannel被open()时,它是开放的,但没有被连接。在调用connect(SocketAddress)连接之后,它将保持连接状态直到关闭。如果连接是非阻塞的,在调用finishConnect()之后,connect(SocketAddress)被用来初始化连接。. isConnectionPending()标志线程是否阻塞。isConnected()标志是否连接。
通道的输入输出流可以在不关闭通道的情况下,独立地、异步地被中断。shutdownInput()方法被用来中断输入流,随后的读操作将返回-1,这意味着流的结束。当中断发生时,如果线程阻塞在读操作时,读操作将安全地停止。当中断发生时,如果线程阻塞在写操作时,写操作将停止并抛出异常。
SocketChannel是线程安全的,在任意时刻不会超过一个线程同时读写。
公共方法
- public abstract boolean connect (SocketAddress address)
连接channel’s socket到远程地址。
如果通道是阻塞的,这个方法将延迟,直到连接结束或者I/O错误发生。如果通道没有阻塞,这个方法将在连接完成时返回ture。 - public abstract boolean finishConnect ()
完成connect(SocketAddress)的进程。 - public abstract boolean isConnected ()
判断 channel’s socket是否连接。 - public abstract boolean isConnectionPending ()
判断channel’s socket是否仍在尝试连接。 - public static SocketChannel open ()
创建一个放开但不连接的socket channel。 - public static SocketChannel open (SocketAddress address)
创建一个连接到address的socket channel。 - public abstract int read (ByteBuffer target)
从socket channel读取bytes到指定的buffer。
当这个方法被调用时,可以读取的最大字节数量是buffer剩余的空间。bytes将被复制到buffer的当前位置。 - public abstract long read (ByteBuffer[] targets, int offset, int length)
从socket channel读取bytes到指定的buffer数组。这个方法将尝试从指定的偏移位置(offset)读取指定长度(length)的剩余bytes。返回值是实际读取的字节数。 - public abstract Socket socket ()
返回被分配给这个channel的socket,它不能声明任何没有在Socket类中声明的公共方法。 - public final synchronized long write (ByteBuffer[] sources)
从指定的byte buffers向socket channel写byte。 - public abstract long write (ByteBuffer[] sources, int offset, int length)
。。。。。。