複製鏈接
請複製以下鏈接發送給好友

java.nio

鎖定
java.nio全稱java non-blocking IO,是指jdk1.4 及以上版本里提供的新api(New IO) ,為所有的原始類型(boolean類型除外)提供緩存支持的數據容器,使用它可以提供非阻塞式的高伸縮性網絡。
中文名
java非阻塞式IO
外文名
java nio
緩衝區
數據容器
特    性
Channel,Buffer,Selector
簡    稱
nio
目    的
提供非阻塞式的高伸縮性網絡

java.nio簡介

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

java.nio描述

定義作為數據容器的緩衝區,並提供其他 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 字節順序的類型安全的枚舉

java.nio通道

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

java.nio緩衝區

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

java.nio判斷

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

java.nio初始版本

從以下版本開始:
1.4