NIO和IO

NIO與普通IO的主要區(qū)別

IO NIO
面向流(Stream Oriented) 面向緩沖區(qū)(Buffer Oriented)
阻塞IO(Blocking IO) 非阻塞IO(Non Blocking IO)
(無) 選擇器(Selectors)
  1. Channels and Buffers(通道和緩沖區(qū)):標準的IO基于字節(jié)流和字符流進行操作的,而NIO是基于通道(Channel)和緩沖區(qū)(Buffer)進行操作,數(shù)據(jù)總是從通道讀取到緩沖區(qū)中,或者從緩沖區(qū)寫入到通道中。
  2. Asynchronous IO(異步IO):Java NIO可以讓你異步的使用IO,例如:當線程從通道讀取數(shù)據(jù)到緩沖區(qū)時,線程還是可以進行其他事情。當數(shù)據(jù)被寫入到緩沖區(qū)時,線程可以繼續(xù)處理它。從緩沖區(qū)寫入通道也類似。
  3. Selectors(選擇器):Java NIO引入了選擇器的概念,選擇器用于監(jiān)聽多個通道的事件(比如:連接打開,數(shù)據(jù)到達)。因此,單個的線程可以監(jiān)聽多個數(shù)據(jù)通道。

緩沖區(qū)(Buffer)

Buffer 是一個對象, 它包含一些要寫入或者要讀出的數(shù)據(jù)。在NIO 類庫中加入Buffer 對象, 體現(xiàn)了新庫與原I/O 的一個重要區(qū)別。在面向流的I/O 中, 可以將數(shù)據(jù)直接寫入或者將數(shù)據(jù)直接讀到對象中。

在NIO 厙中, 所有數(shù)據(jù)都是用緩沖區(qū)處理的。在讀取數(shù)據(jù)時, 它是直接讀到緩沖區(qū)中的: 在寫入數(shù)據(jù)時, 寫入到緩沖區(qū)中。任何時候訪問NIO 中的數(shù)據(jù), 都是通過緩沖區(qū)進行操作。

緩沖區(qū)實質(zhì)上是一個數(shù)組。通常它是一個字節(jié)數(shù)組(ByteBuffer) , 也可以使用其他種類的數(shù)組。但是一個緩沖區(qū)不僅僅是一個數(shù)組, 緩沖區(qū)提供了對數(shù)據(jù)的結(jié)構(gòu)化訪問以及維護讀寫位置(limit) 等信息。

最常用的緩沖區(qū)是ByteBuffer, 一個ByteBuffer 提供了一組功能用于操作byte 數(shù)組。除了ByteBuffer, 還有其他的一些緩沖區(qū), 事實上, 每一種Java 基本類型( 除了Boolean類型) 都對應有一種緩沖區(qū)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容