本篇內(nèi)容介紹了“Netty中流基礎(chǔ)知識點有哪些”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
成都創(chuàng)新互聯(lián)致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營銷,包括網(wǎng)站制作、做網(wǎng)站、SEO優(yōu)化、網(wǎng)絡(luò)推廣、整站優(yōu)化營銷策劃推廣、電子商務(wù)、移動互聯(lián)網(wǎng)營銷等。成都創(chuàng)新互聯(lián)為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制及解決方案,成都創(chuàng)新互聯(lián)核心團隊十多年專注互聯(lián)網(wǎng)開發(fā),積累了豐富的網(wǎng)站經(jīng)驗,為廣大企業(yè)客戶提供一站式企業(yè)網(wǎng)站建設(shè)服務(wù),在網(wǎng)站建設(shè)行業(yè)內(nèi)樹立了良好口碑。
一、同步阻塞I/O(BIO block io)
jdk1.4之前就一個io流,服務(wù)器實現(xiàn)模式為一個連接一個線程,即客戶端有連接請求時服務(wù)器就需要啟動一個線程進 行處理,如果這個連接不做任何事情會造成不必要的線程開銷,可以通過線程池機制來改善。BIO方式適用于連接數(shù)目比較 小且固定的架構(gòu),這種方式對服務(wù)端資源要求比較高,并發(fā)局限于應(yīng)用中。
二、 同步非阻塞I/O(NIO)
Java NIO(New IO)是從Java 1.4版本開始引入的 一個新的IO API,可以替代標(biāo)準(zhǔn)的Java IO API。 NIO與原來 的IO有同樣的作用和目的,但是使用 的方式完全不同,NIO支持面向緩沖區(qū)的、基于 通道的IO操作。NIO將以更加高效的方 式進行文 件的讀寫操作。
三、異步非阻塞I/O(AIO)
異步非阻塞I/O,服務(wù)器實現(xiàn)模式為一個有效請求一個線程,客戶端的IO請求都是由操作系統(tǒng)先完成了再通知服務(wù)器用其 啟動線程進行處理。AIO方式適用于連接數(shù)目多且連接比較長(重操作)的架構(gòu),比如相冊服務(wù)器,充分調(diào)用OS參與并發(fā)操作, 編程比較復(fù)雜,jdk1.7開始支持。
四、同步與異步的區(qū)別
同步:一個人只能先上完小學(xué)才能上初中,上完初中才能上高中,最后才可以大學(xué),一步一步來,這是同步。異步:一個人可以一邊聽歌,也可以一邊玩游戲,兩種動作可以同時進行
五、NIO與IO的區(qū)別
1、定義
client(客戶端)和server(服務(wù)端),把數(shù)據(jù)client傳送到server,或者server傳送到client,就相當(dāng)于怎么上?;疖囌? 的人群運輸?shù)奖本┗疖囌?,或者北京車站運輸?shù)缴虾;疖囌尽? channel:北京上海之間的鐵軌 buffer: 火車(可以有多個型號的火車)
2.1 Buffer(緩沖區(qū))
在Java NIO中負(fù)責(zé)數(shù)據(jù)的存取,緩沖區(qū)就是數(shù)組,用于存儲不同數(shù)據(jù)類型的數(shù)據(jù),根據(jù)數(shù)據(jù)類型不同,提供了響應(yīng) 類型的緩沖區(qū):ByteBuffer、CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer、 DoubleBuffer,通過 allocate() 獲取緩沖區(qū)。
2.2 Channel(通道)
Channel類似于傳送的流,只不過Channel本身不能直接訪問數(shù)據(jù),Channel只能與Buffer進行交互,簡 而言之,Channel 負(fù)責(zé)傳輸, Buffer 負(fù)責(zé)存儲。
一、Path
booleanendsWith(Stringpath) | 判斷是否以path路徑結(jié)束 |
booleanstartsWith(Stringpath) | 判斷是否以path路徑開始 |
boolean isAbsolute() | 判斷是否是絕對路徑 |
PathgetFileName() | 返回與調(diào)用Path對象關(guān)聯(lián)的文件名 |
Path getName(int idx) | 返回的指定索引位置 idx 的路徑名稱 |
intgetNameCount() | 返回Path根目錄后面元素的數(shù)量 |
PathgetParent() | 返回Path對象包含整個路徑,不包含Path對象指定的文件路徑 |
PathgetRoot() | 返回調(diào)用Path對象的根路徑 |
Path resolve(Path p) | 將相對路徑解析為絕對路徑 |
PathtoAbsolutePath() | 作為絕對路徑返回調(diào)用Path對象 |
StringtoString() | 返回調(diào)用Path對象的字符串表示形式 |
二、Paths
java.nio.file.Files 用于操作文件或目錄的工具類。
方法 | 描述 |
---|---|
Path get(String first, String ... more) | Paths提供的get()方法用來獲取Path對象,用于將多個字符串串連成路徑 |
Path copy(Path src, Path dest, CopyOption ... how) | 文件的復(fù)制 |
Path createDirectory(Path path, FileAttribute> ... attr) | 創(chuàng)建一個目錄 |
Path createFile(Path path, FileAttribute> ... arr) | 創(chuàng)建一個文件 |
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) | 判斷是否是可執(zhí)行文件 |
boolean isHidden(Path path) | 判斷是否是隱藏文件 |
boolean isReadable(Path path) | 判斷文件是否可讀 |
boolean isWritable(Path path) | 判斷文件是否可寫 |
boolean notExists(Path path, LinkOption ... opts) | 判斷文件是否不存在 |
三、Files操作內(nèi)容方法
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 對象 |
1、讀取
@Test public void readeFile() { FileInputStream input = null; String result = ""; try { //1.根據(jù)path實例化一個輸入流的對象 input = new FileInputStream("/Users/tentsuuhou/Desktop/潛臺詞.txt"); //2.返回這個輸入流中可以被讀的剩下的bytes字節(jié)的估計值; int size = input.available(); //3.根據(jù)輸入流的字節(jié)創(chuàng)建一個byte數(shù)組 byte[] array = new byte[size]; //4.把數(shù)據(jù)讀取到byte數(shù)組中 input.read(array); //5.根據(jù)獲取的byte數(shù)組新建一個字符串,然后輸出 result = new String(array); System.out.println(result); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if(input != null){ try { input.close(); } catch (IOException e) { e.printStackTrace(); } } } }
2、寫入
@Test public void writeFile() { FileOutputStream out = null; String content = "我愛開源中國"; try { //1.根據(jù)路徑創(chuàng)建輸出流對象 out = new FileOutputStream("/Users/tentsuuhou/Desktop/777.txt") ; //2.把String字符串轉(zhuǎn)換成byte數(shù)組; byte[] b = content.getBytes(); //3.把byte數(shù)組輸出 out.write(b); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if(out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } }
“Netty中流基礎(chǔ)知識點有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!