深入分析JAVA WEB技術(shù)內(nèi)幕(二)

JAVA NIO概述

NIO的工作機(jī)制
  1. channel和selector的概念在NIO中尤為突出。channel可比喻為汽車或者高鐵,selector則是車站的調(diào)度系統(tǒng),負(fù)責(zé)控制每個(gè)車的運(yùn)行狀態(tài)。
public void selector() throws IOException {
        ByteBuffer buffer = ByteBuffer.allocate(1024);
        Selector selector = Selector.open();
        ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
        serverSocketChannel.configureBlocking(false); // 設(shè)置為非阻塞方式
        serverSocketChannel.socket().bind(new InetSocketAddress(8080));
        serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT); // 注冊(cè)監(jiān)聽(tīng)事件
        while(true) {
            Set selectKeys = selector.selectedKeys();
            Iterator iterator = selectKeys.iterator();
            while(iterator.hasNext()) {
                SelectionKey selectionKey = (SelectionKey) iterator.next();
                if ((selectionKey.readyOps() & SelectionKey.OP_ACCEPT) == SelectionKey.OP_ACCEPT) {
                    ServerSocketChannel sscChannel = (ServerSocketChannel) selectionKey.channel();
                    SocketChannel sc = sscChannel.accept();
                    sc.configureBlocking(false);
                    sc.register(selector, SelectionKey.OP_READ);
                    iterator.remove();
                } else if ((selectionKey.readyOps() & SelectionKey.OP_READ) == SelectionKey.OP_READ) {
                    SocketChannel sc = (SocketChannel) selectionKey.channel();
                    while(true) {
                        buffer.clear();
                        int i = sc.read(buffer);
                        if (i < 0) {
                            break;
                        }
                        buffer.flip();
                    }
                    iterator.remove();
                }
            }
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 作者: 一字馬胡 轉(zhuǎn)載標(biāo)志 【2017-11-24】 更新日志 一、Java OIO Java OIO (Jav...
    一字馬胡閱讀 1,373評(píng)論 0 12
  • Java NIO 由以下幾個(gè)核心部分組成: Channels Buffers Selectors 雖然Java N...
    847d9ffdbd10閱讀 441評(píng)論 0 1
  • Java NIO 包括以下核心組件: Channels Buffers Selectors Java NIO 中除...
    翼徳閱讀 189評(píng)論 0 0
  • Java NIO(New IO)是從Java 1.4版本開(kāi)始引入的一個(gè)新的IO API,可以替代標(biāo)準(zhǔn)的Java I...
    JackChen1024閱讀 7,576評(píng)論 1 143
  • 念念不忘,必有回響 再次回味,內(nèi)心依然激情澎湃。 引起我思考的,有幾個(gè)問(wèn)題: 真實(shí)的、本真的、天良的我,到底是誰(shuí)?...
    她總閱讀 576評(píng)論 1 0