• NioSocket抽象类


      1 public abstract class SelectableChannel extends AbstractChannel implements Channel
      2 {
      3     public abstract void configureBlocking (boolean block) throws IOException;
      4     public abstract boolean isBlocking( );
      5     public abstract Object blockingLock( );
      6 }
      7 
      8 public abstract class ServerSocketChannel extends AbstractSelectableChannel
      9 {
     10     public static ServerSocketChannel open( ) throws IOException
     11     public abstract ServerSocket socket( );
     12     public abstract ServerSocket accept( ) throws IOException;
     13     public final int validOps( )
     14 }
     15 
     16 -------------------------------------------------------------------------------------------------------------
     17 
     18 public abstract class SocketChannel extends AbstractSelectableChannel 
     19     implements ByteChannel, ScatteringByteChannel, GatheringByteChannel
     20 {
     21     public static SocketChannel open( ) throws IOException
     22     public static SocketChannel open (InetSocketAddress remote)
     23     throws IOException
     24     public abstract Socket socket( );
     25     public abstract boolean connect (SocketAddress remote)
     26     throws IOException;
     27     public abstract boolean isConnectionPending( );
     28     public abstract boolean finishConnect( ) throws IOException;
     29     public abstract boolean isConnected( );
     30     public final int validOps( )
     31 }
     32 
     33 ---------------------------------------------------------------------------------------------------------------
     34 
     35 Create:
     36 
     37 ServerSocketChannel.open() or SocketChannel.open()
     38 
     39 SocketChannel.socket() -> Socket
     40 Socket.getChannel() -> SocketChannel
     41 
     42 虽然每个SocketChannel对象都会创建一个对等的Socket对象,反过来却不成
     43 立。直接创建的Socket对象不会关联SocketChannel对象,它们的getChannel( )
     44 方法只返回null。
     45 
     46 ----------------------------------------------------------------------------------------------------------------
     47 
     48 public abstract class DatagramChannel extends AbstractSelectableChannel
     49     implements ByteChannel, ScatteringByteChannel, GatheringByteChannel
     50 {
     51     public static DatagramChannel open( ) throws IOException;
     52     public abstract DatagramSocket socket( );
     53     public abstract DatagramChannel connect (SocketAddress remote) throws IOException;
     54     public abstract boolean isConnected( );
     55     public abstract DatagramChannel disconnect( ) throws IOException;
     56     public abstract SocketAddress receive (ByteBuffer dst) throws IOException;
     57     public abstract int send (ByteBuffer src, SocketAddress target);
     58     public abstract int read (ByteBuffer dst) throws IOException;
     59     public abstract long read (ByteBuffer [] dsts) throws IOException;
     60     public abstract long read (ByteBuffer [] dsts, int offset, int length) throws IOException;
     61     public abstract int write (ByteBuffer src) throws IOException;
     62     public abstract long write(ByteBuffer[] srcs) throws IOException;
     63     public abstract long write(ByteBuffer[] srcs, int offset, int length) throws IOException;
     64     public abstract SocketAddress receive (ByteBuffer dst) throws IOException;
     65     public abstract int send (ByteBuffer src, SocketAddress target);
     66 }
     67 
     68 -----------------------------------------------------------------------------------------------------------------
     69 
     70 channel.send (buffer, addr);
     71 addr = receivePacket (channel, buffer);
     72 this.channel.socket( ).bind (new InetSocketAddress (port));
     73 
     74 -----------------------------------------------------------------------------------------------------------------
     75 
     76 FileChannel fc = raf.getChannel( );
     77 FileLock lock = fc.lock (INDEX_START, INDEX_SIZE, false);
     78 lock.release( );
     79 
     80 -----------------------------------------------------------------------------------------------------------------
     81 
     82 public abstract class SelectableChannel extends AbstractChannel implements Channel
     83 {
     84     public abstract SelectionKey register (Selector sel, int ops) throws ClosedChannelException;
     85     public abstract SelectionKey register (Selector sel, int ops, Object att) throws ClosedChannelException;
     86     public abstract boolean isRegistered( );
     87     abstract SelectionKey keyFor (Selector sel);
     88     abstract int validOps( );
     89     abstract void configureBlocking (boolean block) IOException;
     90     abstract boolean isBlocking( );
     91     abstract Object blockingLock( );
     92 }
     93 
     94 ------------------------------------------------------------------------------------------------------------------
     95 
     96 public abstract class Selector
     97 {
     98     public static Selector open( ) throws IOException
     99     public abstract boolean isOpen( );
    100     public abstract void close( ) throws IOException;
    101     public abstract SelectionProvider provider( );
    102     public abstract int select( ) throws IOException;
    103     public abstract int select (long timeout) throws IOException;
    104     public abstract int selectNow( ) throws IOException;
    105     public abstract void wakeup( );
    106     public abstract Set keys( );
    107     public abstract Set selectedKeys( );
    108 }
    109 
    110 -------------------------------------------------------------------------------------------------------------------
    111 
    112 public abstract class SelectionKey
    113 {
    114     public static final int OP_READ
    115     public static final int OP_WRITE
    116     public static final int OP_CONNECT
    117     public static final int OP_ACCEPT
    118     public abstract SelectableChannel channel( );
    119     public abstract Selector selector( );
    120     public abstract void cancel( );
    121     public abstract boolean isValid( );
    122     public abstract int interestOps( );
    123     public abstract void interestOps (int ops);
    124     public abstract int readyOps( );
    125     public final boolean isReadable( )
    126     public final boolean isWritable( )
    127     public final boolean isConnectable( )
    128     public final boolean isAcceptable( )
    129     public final Object attach (Object ob)
    130     public final Object attachment( )
    131 }
    132 
    133 -----------------------------------------------------------------------------------------------------------------------
    134 
    135 选择器包含了注册到它们之上的通道的集合。在任意给定的时间里,对于一个给定的选择器和
    136 一个给定的通道而言,只有一种注册关系是有效的。但是,将一个通道注册到多于一个的选择器上
    137 允许的。这么做的话,在更新interest集合为指定的值的同时,将返回与之前相同的选择键。实际
    138 上,后续的注册都只是简单地将与之前的注册关系相关的键进行更新139 
    140 一个例外的情形是当您试图将一个通道注册到一个相关的键已经被取消的选择器上,而通道仍
    141 然处于被注册的状态的时候。通道不会在键被取消的时候立即注销。直到下一次操作发生为止,它
    142 们仍然会处于被注册的状态。在这种情况下,未检查的CancelledKeyException将
    143 会被抛出。请务必在键可能被取消的情况下检查SelectionKey对象的状态。
    144 
    145 -----------------------------------------------------------------------------------------------------------------------
    146 
    147 有 四 种被 定 义 的 可 选 择 操 作 :读 (read) , 写 (write), 连 接 (connect) 和 接 受(accept)
    148 
    149 -----------------------------------------------------------------------------------------------------------------------
    150 
    151 最简单的状态测试方法是:
    152 SelectionKey.isAcceptable()   等价于 ((key.readyOps( ) & SelectionKey.OP_ACCEPT) != 0
    153 SelectionKey.isConnectable()   等价于 ((key.readyOps( ) & SelectionKey.OP_CONNECT) != 0
    154 SelectionKey.isReadable()   等价于 ((key.readyOps( ) & SelectionKey.OP_READ) != 0
    155 SelectionKey.isWritable()   等价于 ((key.readyOps( ) & SelectionKey.OP_WRITE) != 0
  • 相关阅读:
    计算机与软件工程 作业一
    软件工程作业6 咸鱼不闲团队 校园二手交易系统
    软件工程 作业5
    计算与软件工程 作业4
    软件工程第四次作业评价总结
    计算与软件工程 作业3
    计算与软件共程作业2
    计算与软件工程 作业一
    计算与软件工程作业六
    计算与软件工程作业五
  • 原文地址:https://www.cnblogs.com/rilley/p/2593910.html
Copyright © 2020-2023  润新知