日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

netty:IO模型

發(fā)布時間:2025/6/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 netty:IO模型 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

BIO,NIO模型

BIO代碼實現(xiàn)

import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;public class BIOServer {public static void main(String[] args) throws IOException{ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();ServerSocket serverSocket = new ServerSocket(8888);System.out.println("服務(wù)器啟動...");while(true){// 監(jiān)聽final Socket socket = serverSocket.accept();System.out.println("連接一個客戶端...");newCachedThreadPool.execute(new Runnable(){@Overridepublic void run() {handler(socket);}});}}public static void handler(Socket socket){try {byte[] bytes = new byte[1024];InputStream ins = socket.getInputStream();while(true){int readLength = ins.read(bytes);if(-1 != readLength){System.out.println("線程: " + Thread.currentThread().getName() + " ");System.out.println(new String(bytes,0,readLength));}else{break;}}} catch (Exception e) {e.printStackTrace();}finally{try {socket.close();} catch (IOException e) {e.printStackTrace();}}} }

使用telnet連接ServerSocket

telnet 127.0.0.1 8888

NIO(non-blocking IO)同步非阻塞

NIO有三大核心部分, Channel(通道), Buffer(緩沖區(qū)), Selector(選擇器)
1.每個Channel都會對應(yīng)一個Buffer。
2.Selector對應(yīng)一個線程,一個線程對應(yīng)多個channel。
3.程序切換到哪個channel是由事件決定的,Event(事件)就是一個重要的概念。
4.Buffer是一個內(nèi)存塊,底層是有一個數(shù)組。
5.數(shù)據(jù)的讀取寫入是通過Buffer,這個和BIO不一樣, BIO中是通過輸入流,輸出流兩個流進行讀取,寫入的。而NIO僅僅只通過Buffer就完成讀取寫入。
6.Channel也是雙向的,可以返回底層操作系統(tǒng)的情況,比如linux底層的操作系統(tǒng)通道就是雙向的。

buffer

Channel(通道)

  • 通道可以同時進行讀寫,但流只能讀或者寫
  • 通道可以實現(xiàn)異步讀寫數(shù)據(jù)
  • 通道可以從緩沖(buffer)讀數(shù)據(jù),也可以寫數(shù)據(jù)到緩沖(buffer)
    FileChannel用于文件的數(shù)據(jù)讀寫。
    DatagramChannel用于UDP的數(shù)據(jù)讀寫。
    ServerSocketChannel和SocketChannel用于TCP的數(shù)據(jù)讀寫。
  • 向本地文件寫數(shù)據(jù)

    import java.io.FileOutputStream; import java.nio.ByteBuffer; import java.nio.channels.FileChannel;public class NIOFileChannel01 {public static void main(String[] args) throws Exception{String str = "hello, 風云爭霸ddd";// 創(chuàng)建一個輸出流FileOutputStream fos = new FileOutputStream("C:\\Users\\haha\\Desktop\\2.txt");// 通過FileOutputStream 獲取對應(yīng)的 FileChannel// 這個fileChannel的真是類型是FileChannelImplFileChannel fileChannel = fos.getChannel();// 創(chuàng)建一個緩沖區(qū) ByteBufferByteBuffer bf = ByteBuffer.allocate(1024);// 將str放入bf中bf.put(str.getBytes());bf.flip();// 將bf數(shù)據(jù)寫入到fileChannelfileChannel.write(bf);fos.close();} }

    從本地文件讀數(shù)據(jù)

    import java.io.FileInputStream; import java.nio.ByteBuffer; import java.nio.channels.FileChannel;public class NIOFileChannel02 {public static void main(String[] args) throws Exception{ // 創(chuàng)建一個輸出流FileInputStream fis = new FileInputStream("C:\\Users\\haha\\Desktop\\2.txt");// 通過FileOutputStream 獲取對應(yīng)的 FileChannel// 這個fileChannel的真是類型是FileChannelImplFileChannel fileChannel = fis.getChannel();// 創(chuàng)建一個緩沖區(qū) ByteBufferByteBuffer bf = ByteBuffer.allocate(1024);// 將str放入bf中fileChannel.read(bf);System.out.println(new String(bf.array()));fis.close();} }

    Buffer類相關(guān)方法

    ByteBuffer類(最常用的Buffer類)

    NIO還支持通過多個Buffer(即Buffer數(shù)組)完成讀寫操作, 即Scattering 和 Gathering

    import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel;/** Scattering: 將數(shù)據(jù)寫入到buffer時,可以采用buffer數(shù)組,依次寫入* Gathering: 從buffer讀取數(shù)據(jù)時,可以采用buffer數(shù)組,依次讀*/ public class ScatteringAndGatheringTest {public static void main(String[] args) throws Exception{// 使用ServerSocketChannel,ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();InetSocketAddress inetSocketAddress = new InetSocketAddress(7000);// 綁定端口到socket,并啟動serverSocketChannel.socket().bind(inetSocketAddress);// 創(chuàng)建buffer數(shù)組ByteBuffer[] byteBuffers = new ByteBuffer[2];byteBuffers[0] = ByteBuffer.allocate(5);byteBuffers[1] = ByteBuffer.allocate(3);// 等待客戶端連接SocketChannel socketChannel = serverSocketChannel.accept();int messageLength = 8;// 循環(huán)的讀取while(true){int byteRead = 0;while(byteRead < messageLength){long l = socketChannel.read(byteBuffers);byteRead += l; // 累計讀取的字節(jié)數(shù)System.out.println("byteRead=" + byteRead);// 看看當前buffer的position,limitfor(int i=0; i<byteBuffers.length; i++){System.out.println("position="+byteBuffers[i].position()+" "+"limit="+byteBuffers[i].limit());}}// 將所有buffer進行flipfor(int i=0; i<byteBuffers.length; i++){byteBuffers[i].flip();}// 將數(shù)據(jù)顯示到客戶端long byteWrite = 0;while(byteWrite < messageLength){long l = socketChannel.write(byteBuffers);byteWrite += l;}// 將所有buffer進行clearfor(int i=0; i<byteBuffers.length; i++){byteBuffers[i].clear();}System.out.println("byteRead="+byteRead+" byteWrite="+byteWrite);}} } 《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的netty:IO模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 欧美一区二区三区免费在线观看 | 男女男精品视频网站 | 在线观看成人免费视频 | 亚洲天堂av网 | 永久免费毛片 | 日本污网站 | 中文字幕有码无码人妻av蜜桃 | 亚洲av无码国产精品色午夜 | 大地资源二中文在线影视观看 | 成人免费一级片 | 操三八男人的天堂 | 成人欧美一级特黄 | 国产人成精品 | 色综合久久88 | 激情小说一区 | 色婷五月 | 国产伦精品一区二区三区照片91 | 国产88av | 欧美性猛交xxxx免费看 | 伊人久久久久久久久久 | 国产伦精品一区二区三区照片 | 五月天久久久久久 | 饥渴丰满的少妇喷潮 | 日韩人成 | 国内毛片毛片毛片 | 福利所第一导航 | 女儿朋友 | 老司机av影院 | 黑人毛片网站 | 免费无码毛片一区二区app | 日本人极品人妖高潮 | 中文字幕视频免费 | 国产美女明星三级做爰 | 一区二区三区免费网站 | 国产一级α片 | 男女高h视频 | 国产免费a级片 | 梦梦电影免费高清在线观看 | 国内精久久久久久久久久人 | www.国产免费 | 国产精品1区2区3区4区 | 亚洲欧美日韩图片 | 篠田优在线观看 | 影音先锋欧美资源 | 日日骚av | 看特级毛片 | 欧美性做爰毛片 | 亚洲欧美日韩精品在线 | 国产初高中真实精品视频 | 探花av在线 | 国产毛片基地 | 成人午夜视频精品一区 | 亚洲最大黄网 | 亚洲av无码一区二区乱孑伦as | 亚洲精品一区二区三区四区五区 | 日本黄在线观看 | 91华人在线 | 无码人妻一区二区三区免费n鬼沢 | 少妇av导航| 国产福利在线视频观看 | 久久久久欧美 | 亚洲精品网站在线播放gif | 日本久久网站 | 国产婷婷色 | 国产精品久久久久久久久 | 欧美福利精品 | 亚洲va天堂va欧美ⅴa在线 | 亚洲一卡二卡在线 | 69视频免费看 | av视| 色一情一伦一子一伦一区 | 午夜精品久久久久久久爽 | 色妹子综合| 日本三级视频网站 | 91www| 日韩视频在线免费播放 | 日韩欧美猛交xxxxx无码 | 国产精品一区电影 | 免费国产精品视频 | av手机免费在线观看 | 免费三片在线观看网站v888 | www视频在线观看网站 | 开心色站 | 日韩草逼| 亚洲AV无码一区二区三区少妇 | 国产丝袜高跟 | 一边摸内裤一边吻胸 | 91av在线播放 | 午夜视频在线观看一区 | 国产粉嫩呻吟一区二区三区 | 182午夜视频 | 欧美人妻精品一区二区 | 一级黄网| 欧美精品人妻一区二区 | 老司机成人网 | 亚洲永久免费视频 | 在线观看黄网址 | 国产男男gay体育生白袜 | 久久亚洲精品国产精品黑人v |