DatagramChannel  datagramChannel_T=null;
 try  { 
                 selector = Selector.open();                  datagramChannel_T=DatagramChannel.open();
                 datagramChannel_T.configureBlocking(false);//设置为非阻塞
                 datagramChannel_T.socket().bind(new InetSocketAddress(10000)); // 收数据端口                //  OP_ACCEPT(用于服务器端)、OP_CONNECT(用于客户端)、OP_READ和OP_WRITE
                 datagramChannel_T.register(selector, SelectionKey.OP_READ); //因为UDP 不存在 客户端和服务器连接,所以不能用  OP_ACCEPT        
                           } 
             catch  ( Exception e ) 
             { 
                 e.printStackTrace () ; 
                 
             } 
            byte[] bufferData=new byte[1500];
             ByteBuffer byteBuffer = ByteBuffer.wrap(bufferData);             while  ( true)
{ 
           try
 {
     int  eventsCount = selector.selectNow(); 
  if(eventsCount == 0)
 {
                     
     continue;  
    }       if  ( eventsCount >  0 ) {   
    Iterator<SelectionKey> iterator =  selector.selectedKeys () .iterator ();                       
   while  ( iterator.hasNext ()) {
 SelectionKey sk =  ( SelectionKey )  iterator.next () ;
iterator.remove () ;
   if  ( sk.isReadable ()) {
 
  DatagramChannel datagramChannel =  ( DatagramChannel )  sk .channel () ;
datagramChannel.receive(byteBuffer);
byteBuffer.flip () ;
 byte[] byten = new byte[byteBuffer.limit()]; // 可用的字节数量
  byteBuffer.get(byten, byteBuffer.position(), byteBuffer.limit()); // 得到目前为止缓冲区所有的数据 
 byteBuffer.clear () ;
                             }
                       
                             
                         } 
                     } 
                 }  
                 catch  ( Exception e ) 
                 { 
                     e.printStackTrace (); 
                  
                     break;
                 }
             } 
 
 
}
}

这代码 是android 下利用NIO技术 来通过udp协议收流, 这个是非阻塞的, 是基于IO事件来轮训 ,效率高于socket那种阻塞模型,这个NIO技术还是基于socket 的