今天我们通过一个实例详细讲解下Android下NIO非阻塞服务器的开发,对于客户端而言Android123不推荐使用NIO,毕竟NIO相对于传统IO较为复杂,最重要的NIO是为了解决多线程并发问题而解决的技术,可能会因为管理和复杂性降低最终的结果,毕竟NIO是Java的,相关的类型比较难控制,对于客户端而言我们可以使用C++、Java、C#甚至Flash Action Script来编写。 下面我们以一个简单的Echo Server为例子来分析 import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.CharBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;import java.nio.charset.Charset;import java.nio.charset.CharsetDecoder;import java.nio.charset.CharsetEncoder;import java.util.Iterator; public class Server { public static void main(String[] args) { Selector selector = null; ServerSocketChannel ssc = null; try { selector = Selector.open(); //实例化selector ssc = ServerSocketChannel.open(); //实例化ServerSocketChannel 对象 ssc.socket().bind(new InetSocketAddress(1987)); //绑定端口为1987 ssc.configureBlocking(false); //设置为非阻塞模式 ssc.register(selector, SelectionKey.OP_ACCEPT); //注册关心的事件,对于Server来说主要是accpet了 while (true) { […]
NIO非阻塞包
Android开发进阶之NIO非阻塞包(八) Android开发技术
在整个DDMS中体现Android NIO主要框架的要数MonitorThread.java这个文件了,有关PC和Android手机同步以及NIO非阻塞编程的精髓可以在下面的文件中充分体现出来。 final class MonitorThread extends Thread { private static final int CLIENT_READY = 2; private static final int CLIENT_DISCONNECTED = 3; private volatile boolean mQuit = false; private ArrayList<Client> mClientList; //用一个数组保存客户端信息 private Selector mSelector; private HashMap<Integer, ChunkHandler> mHandlerMap; //这里Android123提示大家,由于在多线程中concurrentHashMap效率比HashMap更安全高效,推荐使用并发库的这个替代版本。 private ServerSocketChannel mDebugSelectedChan; //一个用于调试的服务器通道 private […]

