<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java NIO 簡單經典示例

    Java NIO 主要是Channel, SelectionKey, Selector 三個類之間的關系,下面的例子就是演示如果使用NIO來處理請求的:/**
     * 
     */
    package dongzi.nio.exercise.nio;

    import java.io.IOException;
    import java.net.InetSocketAddress;
    import java.net.ServerSocket;
    import java.nio.ByteBuffer;
    import java.nio.channels.ClosedChannelException;
    import java.nio.channels.SelectionKey;
    import java.nio.channels.Selector;
    import java.nio.channels.ServerSocketChannel;
    import java.nio.channels.SocketChannel;
    import java.util.Iterator;

    /**
     * 
    @author kyle
     * 
     
    */
    public class SelectSockets {

        private static final int PORT_NUMBER = 1234;

        /**
         * 
    @param args
         
    */
        public static void main(String[] args) {
            new SelectSockets().go(args);
        }

        private void go(String[] args) {
            int port = PORT_NUMBER;
            if (args.length > 0) {
                try {
                    port = Integer.parseInt(args[0]);
                } catch (Exception e) {
                }
            }

            System.out.println("Listening port: " + PORT_NUMBER);
            try {
                Selector selector = Selector.open();
                startServer(port, selector);
                while (true) {
                    int n = selector.select();
                    if (n == 0) {
                        continue;
                    }

                    Iterator it = selector.selectedKeys().iterator();
                    while (it.hasNext()) {
                        SelectionKey key = (SelectionKey) it.next();
                        if (key.isAcceptable()) {
                            ServerSocketChannel server = (ServerSocketChannel) key
                                    .channel();
                            SocketChannel channel = server.accept();
                            registerChannel(selector, channel, SelectionKey.OP_READ);
                            sayHello(channel);

                        }
                        if (key.isReadable()) {
                            readDataFromChannel(key);
                        }
                    }

                    it.remove();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        private ByteBuffer buffer = ByteBuffer.allocate(1024);

        private void readDataFromChannel(SelectionKey key) throws IOException {
            int count = 0;
            SocketChannel channel = (SocketChannel) key.channel();
            buffer.clear();
            while ((count = channel.read(buffer)) > 0) {
                buffer.flip();
                while (buffer.hasRemaining()) {
                    System.out.println(buffer.get());
                }
                buffer.clear();
            }
            if (count < 0) {
                channel.close();
            }

        }

        private void sayHello(SocketChannel channel) throws IOException {
            if (channel == null) {
                return;
            }
            buffer.clear();
            ByteBuffer buffer = ByteBuffer.wrap("Hi, there \r\n".getBytes());
            buffer.flip();
            channel.write(buffer);
        }

        private void registerChannel(Selector selector, SocketChannel channel,
                int opRead) throws IOException {

            if (channel == null) {
                return;
            }

            channel.configureBlocking(false);
            channel.register(selector, opRead);
        }

        private void startServer(int port, Selector selector) throws IOException,
                ClosedChannelException {
            ServerSocketChannel serverChannel = ServerSocketChannel.open();
            serverChannel.configureBlocking(false);
            ServerSocket serverSocket = serverChannel.socket();
            serverSocket.bind(new InetSocketAddress(port));
            serverChannel.register(selector, SelectionKey.OP_ACCEPT);
        }

    }


    Kyle Wang

    posted on 2012-09-26 22:40 王樹東 閱讀(4368) 評論(0)  編輯  收藏 所屬分類: Java Skills Learning and Sharing

    <2012年9月>
    2627282930311
    2345678
    9101112131415
    16171819202122
    23242526272829
    30123456

    導航

    統計

    公告

    常用鏈接

    留言簿

    隨筆分類(17)

    隨筆檔案(15)

    文章分類(4)

    文章檔案(5)

    收藏夾(4)

    Algorithm

    Design

    Environment Setup

    Installer

    Maven

    MINA

    OS

    Skills for Java

    VIM

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日本免费网站视频www区| 久久不见久久见免费影院www日本| 中文字幕在线免费观看| 亚洲区小说区激情区图片区| 一级毛片大全免费播放下载| 一区国严二区亚洲三区| 男人扒开添女人下部免费视频| 亚洲AV成人潮喷综合网| 国产精品免费看久久久香蕉| 国产自偷亚洲精品页65页| A国产一区二区免费入口| 亚洲精品国产美女久久久| 久9热免费精品视频在线观看| 噜噜噜亚洲色成人网站∨| 韩国免费一级成人毛片| 337p日本欧洲亚洲大胆人人| 亚洲成?v人片天堂网无码| 不卡视频免费在线观看| 色婷婷六月亚洲婷婷丁香| 国产桃色在线成免费视频 | 9久9久女女免费精品视频在线观看 | 老司机亚洲精品影院无码| 最近免费视频中文字幕大全| 中中文字幕亚洲无线码| 亚洲成A人片在线观看无码3D| a在线观看免费网址大全| 亚洲美女激情视频| 国产精品久免费的黄网站 | aa在线免费观看| 亚洲视频小说图片| 日本人的色道www免费一区| 国产大片免费天天看| 亚洲精品国产免费| 免费国产成人午夜电影| 久久九九全国免费| 亚洲午夜无码久久久久软件| 中文字幕亚洲日韩无线码| 久九九精品免费视频| av午夜福利一片免费看久久| 亚洲av无码一区二区三区天堂古代 | 国产美女精品视频免费观看|