Netty進階基礎篇之流概念篇(1)

序言:學Netty以前,對流的概念應該深入一些,因此先理解一下流的使用!java

一、IO、NIO、AIO 含義區別

1.1 同步阻塞I/O(BIO block io)

jdk1.4以前就一個io流,服務器實現模式爲一個鏈接一個線程,即客戶端有鏈接請求時服務器就須要啓動一個線程進行處理,若是這個鏈接不作任何事情會形成沒必要要的線程開銷,能夠經過線程池機制來改善。BIO方式適用於鏈接數目比較小且固定的架構,這種方式對服務端資源要求比較高,併發侷限於應用中。編程

1.2 同步非阻塞I/O(NIO)

Java NIO(New IO)是從Java 1.4版本開始引入的 一個新的IO API,能夠替代標準的Java IO API。 NIO與原來的IO有一樣的做用和目的,可是使用 的方式徹底不一樣,NIO支持面向緩衝區的、基於 通道的IO操做。NIO將以更加高效的方式進行文 件的讀寫操做。數組

1.3 異步非阻塞I/O(AIO)

異步非阻塞I/O,服務器實現模式爲一個有效請求一個線程,客戶端的IO請求都是由操做系統先完成了再通知服務器用其啓動線程進行處理。AIO方式適用於鏈接數目多且鏈接比較長(重操做)的架構,好比相冊服務器,充分調用OS參與併發操做,編程比較複雜,jdk1.7開始支持。服務器

1.4 同步與異步的區別

同步:一我的只能先上完小學才能上初中,上完初中才能上高中,最後才能夠大學,一步一步來,這是同步。架構

異步:一我的能夠一邊聽歌,也能夠一邊玩遊戲,兩種動做能夠同時進行併發

1.5 NIO與IO的區別

二、NIO的核心

client(客戶端)和server(服務端),把數據client傳送到server,或者server傳送到client,就至關於怎麼上海火車站的人羣運輸到北京火車站,或者北京車站運輸到上海火車站。異步

channel至關於:北京上海之間的鐵軌工具

buffer至關於:火車(能夠有多個型號的火車)spa

2.1 Buffer(緩衝區)

在Java NIO中負責數據的存取,緩衝區就是數組,用於存儲不一樣數據類型的數據,根據數據類型不一樣,提供了響應類型的緩衝區:ByteBuffer、CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer、DoubleBuffer,經過 allocate() 獲取緩衝區。操作系統

2.2 Channel(通道)

Channel相似於傳送的流,只不過Channel自己不能直接訪問數據,Channel只能與Buffer進行交互

簡而言之,Channel 負責傳輸, Buffer 負責存儲

接下來的幾片博客,將詳細分別講述Buffer、Channel的用法。

三、Path 與 Paths

3.1 Path

Pathjava.nio.file.Path 接口表明一個平臺無關的平臺路徑,描述了目錄結構中文件的位置。

Path經常使用方法:

Path經常使用方法
booleanendsWith(Stringpath) 判斷是否以path路徑結束
booleanstartsWith(Stringpath) 判斷是否以path路徑開始
boolean isAbsolute() 判斷是不是絕對路徑
PathgetFileName() 返回與調用Path對象關聯的文件名
Path getName(int idx) 返回的指定索引位置 idx 的路徑名稱
intgetNameCount() 返回Path根目錄後面元素的數量
PathgetParent() 返回Path對象包含整個路徑,不包含Path對象指定的文件路徑
PathgetRoot() 返回調用Path對象的根路徑
Path resolve(Path p) 將相對路徑解析爲絕對路徑
PathtoAbsolutePath() 做爲絕對路徑返回調用Path對象
StringtoString() 返回調用Path對象的字符串表示形式
   

3.2 Paths

java.nio.file.Files 用於操做文件或目錄的工具類。

Files經常使用方法

方法 描述
Path get(String first, String ... more) Paths提供的get()方法用來獲取Path對象,用於將多個字符串串連成路徑
Path copy(Path src, Path dest, CopyOption ... how) 文件的複製
Path createDirectory(Path path, FileAttribute<?> ... attr) 建立一個目錄
Path createFile(Path path, FileAttribute<?> ... arr) 建立一個文件
void delete(Path path) 刪除一個文件
Path move(Path src, Path dest, CopyOption...how) 將 src 移動到 dest 位置  long size(Path path) : 返回 path 指定文件的大小
boolean exists(Path path, LinkOption ... opts) 判斷文件是否存在
boolean isDirectory(Path path, LinkOption ... opts) 判斷是不是目錄
boolean isExecutable(Path path) 判斷是不是可執行文件
boolean isHidden(Path path) 判斷是不是隱藏文件
boolean isReadable(Path path) 判斷文件是否可讀
boolean isWritable(Path path) 判斷文件是否可寫
 boolean notExists(Path path, LinkOption ... opts) 判斷文件是否不存在

 

Files操做內容方法
SeekableByteChannel newByteChannel(Path path, OpenOption...how)

獲取與指定文件的鏈接,how 指定打開方式。

DirectoryStream newDirectoryStream(Path path) 打開 path 指定的目錄
InputStream newInputStream(Path path, OpenOption...how) 獲取 InputStream 對象
OutputStream newOutputStream(Path path, OpenOption...how) 獲取 OutputStream 對象
相關文章
相關標籤/搜索