Java review--NIO
NIO其實很簡單,核心元件就三個:通道(Channels), 緩衝區(Buffers),Selectors(選擇器)。
Selector和Channel
要使用Selector,得向Selector檢測多個NIO通道,並註冊Channel,然後呼叫它的select()方法。這個方法會一直阻塞到某個註冊的通道有事件就緒。一旦這個方法返回,執行緒就可以處理這些事件,事件的例子有如新連線進來,資料接收等.
簡述實現就是:
1.建立
Selector selector = Selector.open();
2.註冊通道(FileChannel不可以,因為它只能是阻塞模式)
channel.configureBlocking(false);//channel處於非阻塞模式
SelectionKey key = channel.register(selector,Selectionkey.OP_READ);
3.可以監聽的事件
connect /accept/read/write
4.Selector註冊Channel時,register()方法會返回一個SelectionKey物件
selectionKey.isAcceptable();
selectionKey.isConnectable();
selectionKey.isReadable();
selectionKey.isWritable();
Buffers使用
1.Buffer寫入資料,記錄條數
2.讀取資料,通過flip()方法將Buffer()從寫模式,轉換到讀模式,可讀取所有資料。
3.讀取完成後,清空緩衝區,可複寫。
清空方式:clear()清空整個緩衝區 ;compact()清楚已經讀過的所有資料。
未讀的資料放到緩衝區起始位置,新寫入的資料將放到緩衝區未讀資料的後面。
IO和NIO對比
對比之前,先補充一些基礎知識,同步和非同步,阻塞和非阻塞。
1)阻塞、非阻塞
阻塞:一直等到資料準備好;
非阻塞:有就返回資料,沒有直接返回。
2)同步、非同步
同步IO:阻塞某方法,等待IO時間完成;直到讀寫進入執行緒,開銷較大。
非同步IO:把IO讀寫交給作業系統,完成後給應用程式一個通知。
IO | NIO |
面向流 | 面向緩衝區 |
阻塞、同步 | 非阻塞、非同步 |
無 | 選擇器Selector |
NIO比IO靈活,在資料讀取移動方面;並且Selector可以一個單獨的執行緒監視多個輸入通道。
參考系列部落格:http://ifeve.com/buffers/
相關文章
- Java SE, Java EE, Java MEJava
- 【Java】The Java Headless ModeJava
- 【Java】A Guide to the Java ExecutorServiceJavaGUIIDE
- Java 解惑(Java Puzzler)Java
- JAVA java學習(24)——————java修飾符Java
- Java 陣列、Java 日期時間、Java 正規表示式、Java 方法Java陣列
- Java 8 + 10 = Java 18Java
- 淺析Java反射--JavaJava反射
- 【Java筆記】Java JDKJava筆記JDK
- Java 安全之Java AgentJava
- JAVA-java日期工具類Java
- Java學習—java-RedisJavaRedis
- Java筆記-Java反射(二)Java筆記反射
- Java基礎類庫【Java】Java
- Java基礎系列—Java反射Java反射
- Java:Java的物件導向Java物件
- java分散式(java入門)Java分散式
- Treasure Of JAVA——JAVA的資料型別(JAVA面試題)Java資料型別面試題
- JAVA學習筆記—JAVA WEB(二)JAVA WEB核心(下)Java筆記Web
- JavaJava
- ```javaJava
- java,javac,java -version的區別Java
- 【Java基礎】01初識JavaJava
- 【java提高】(17)---Java 位運算子Java
- ?Java基礎之Java列舉Java
- [JAVA] Java switch的使用細節Java
- Java進階--Java動態代理Java
- java 8 - java 17 升級指北Java
- JAVA學習--JAVA基礎(一)Java
- 《Effective Java》--Java進階必備Java
- java原始碼-java.util.ListJava原始碼
- 【Java反射】Java 泛型基礎Java反射泛型
- 【java學習】JDK(Java Development Kit)JavaJDKdev
- 【Java】Java計時器(秒錶)Java
- [JAVA] 初識Java 和 Java的跨平臺實現原理Java
- 【JAVA集合】JAVA集合框架及其常用方法Java框架
- 【Java 反射學習】Java 反射基礎Java反射
- [Java 反射學習] Java 反射基礎Java反射
- 天天學JAVA-JAVA基礎(6)Java