java.nio

java.nio

java.nio全稱java non-blocking IO,是指jdk1.4 及以上版本里提供的新api(New IO) ,為所有的原始類型(boolean類型除外)提供快取支持的數據容器,使用它可以提供非阻塞式的高伸縮性網路。

基本介紹

  • 中文名:java非阻塞式IO
  • 外文名:java nio
  • 緩衝區:數據容器
  • 特性:Channel,Buffer,Selector
  • 簡稱:nio
  • 目的:提供非阻塞式的高伸縮性網路
簡介,描述,通道,緩衝區,判斷,初始版本,

簡介

Sun 官方標榜的特性如下: 為所有的原始類型提供(Buffer)快取支持。字元集編碼解碼解決方案。 Channel :一個新的原始I/O 抽象。 支持鎖和記憶體映射檔案的檔案訪問接口。 提供多路(non-blocking) 非阻塞式的高伸縮性網路I/O 。

描述

定義作為數據容器的緩衝區,並提供其他 NIO 包的概述。
NIO API 的集中抽象為:
緩衝區,它們是數據容器;
字元集及其相關解碼器 和編碼器,
它們在位元組和 Unicode字元之間進行轉換;
各種類型的通道,它們表示到能夠執行 IO 操作的
實體的連線;以及選擇器 和選擇鍵,它們與
可選擇信道 一起定義了多路的、無阻塞的
I/O 設施。
java.nio 包定義了緩衝區類,這些類用於所有 NIO API。java.nio.charset包中定義了字元集API,java.nio.channels包中定義了信道和選擇器 API。每個子包都具有自己的服務提供程式接口(SPI) 子包,SPI 子包的內容可用於擴展平台的默認實現或構造替代實現。
緩衝區
描述
Buffer 位置,界限和容量;
清除,反轉,重繞和標記/重置
ByteBuffer Get/put,壓縮,查看;分配,包裝
MappedByteBuffer 映射到檔案的位元組緩衝區
CharBuffer Get/put,壓縮;分配,包裝
DoubleBuffer ' '
FloatBuffer ' '
IntBuffer ' '
LongBuffer ' '
ShortBuffer ' '
ByteOrder 位元組順序的類型安全的枚舉

通道

Channel是一個對象,可以通過它讀取和寫入數據。拿 NIO 與原來的 I/O 做個比較,通道就像是流,而且他們面向緩衝區的。
正如前面提到的,所有數據都通過 Buffer 對象來處理。您永遠不會將位元組直接寫入通道中,相反,您是將數據寫入包含一個或者多個位元組的緩衝區。同樣,您不會直接從通道中讀取位元組,而是將數據從通道讀入緩衝區,再從緩衝區獲取這個位元組。
通道與流的不同之處在於通道是雙向的。而流只是在一個方向上移動(一個流必須是 InputStream 或者 OutputStream 的子類), 而 通道 可以用於讀、寫或者同時用於讀寫。
因為它們是雙向的,所以通道可以比流更好地反映底層作業系統的真實情況。特別是在 UNIX 模型中,底層作業系統通道是雙向的。

緩衝區

是一個固定數據量的指定基本類型的數據容器。除內容之外,緩衝區還具有位置 和界限,其中位置是要讀寫的下一個元素的索引,界限是第一個應該讀寫的元素的索引。基本 Buffer 類定義了這些屬性以及清除、反轉 和重繞 方法,用以標記 當前位置,以及將當前位置重置 為前一個標記處。
每個非布爾基本類型都有一個緩衝區類。每個類定義了一系列用於將數據移出或移入緩衝區的 get 和 put 方法,用於壓縮、複製 和切片 緩衝區的方法,以及用於分的異類或同類二進制數據序列),訪問要么是以 big-endian位元組順序進行,要么是以 little-endian 位元組順序進行。

判斷

由於客戶端下線時,伺服器端SocketChannel不會立即自動改變連線狀態,其仍然可以read()。所以通常以read()返回值進行判斷。當read()返回為-1時即判斷該連線斷開。即當channel讀到末尾後仍然沒有數據傳送,伺服器即下線。

初始版本

從以下版本開始:
1.4

相關詞條

熱門詞條

聯絡我們