序言:學Netty以前,對流的概念應該深入一些,因此先理解一下流的使用!java
jdk1.4以前就一個io流,服務器實現模式爲一個鏈接一個線程,即客戶端有鏈接請求時服務器就須要啓動一個線程進行處理,若是這個鏈接不作任何事情會形成沒必要要的線程開銷,能夠經過線程池機制來改善。BIO方式適用於鏈接數目比較小且固定的架構,這種方式對服務端資源要求比較高,併發侷限於應用中。編程
Java NIO(New IO)是從Java 1.4版本開始引入的 一個新的IO API,能夠替代標準的Java IO API。 NIO與原來的IO有一樣的做用和目的,可是使用 的方式徹底不一樣,NIO支持面向緩衝區的、基於 通道的IO操做。NIO將以更加高效的方式進行文 件的讀寫操做。數組
異步非阻塞I/O,服務器實現模式爲一個有效請求一個線程,客戶端的IO請求都是由操做系統先完成了再通知服務器用其啓動線程進行處理。AIO方式適用於鏈接數目多且鏈接比較長(重操做)的架構,好比相冊服務器,充分調用OS參與併發操做,編程比較複雜,jdk1.7開始支持。服務器
同步:一我的只能先上完小學才能上初中,上完初中才能上高中,最後才能夠大學,一步一步來,這是同步。架構
異步:一我的能夠一邊聽歌,也能夠一邊玩遊戲,兩種動做能夠同時進行併發
client(客戶端)和server(服務端),把數據client傳送到server,或者server傳送到client,就至關於怎麼上海火車站的人羣運輸到北京火車站,或者北京車站運輸到上海火車站。異步
channel至關於:北京上海之間的鐵軌工具
buffer至關於:火車(能夠有多個型號的火車)spa
在Java NIO中負責數據的存取,緩衝區就是數組,用於存儲不一樣數據類型的數據,根據數據類型不一樣,提供了響應類型的緩衝區:ByteBuffer、CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer、DoubleBuffer,經過 allocate() 獲取緩衝區。操作系統
Channel相似於傳送的流,只不過Channel自己不能直接訪問數據,Channel只能與Buffer進行交互
簡而言之,Channel 負責傳輸, Buffer 負責存儲
接下來的幾片博客,將詳細分別講述Buffer、Channel的用法。
Pathjava.nio.file.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對象的字符串表示形式 |
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 對象 |