溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Netty中流基礎知識點有哪些

發(fā)布時間:2021-11-16 09:42:44 來源:億速云 閱讀:128 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“Netty中流基礎知識點有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

1、IO、NIO、AIO 含義區(qū)別

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

    jdk1.4之前就一個io流,服務器實現(xiàn)模式為一個連接一個線程,即客戶端有連接請求時服務器就需要啟動一個線程進
行處理,如果這個連接不做任何事情會造成不必要的線程開銷,可以通過線程池機制來改善。BIO方式適用于連接數(shù)目比較
小且固定的架構,這種方式對服務端資源要求比較高,并發(fā)局限于應用中。

二、 同步非阻塞I/O(NIO)

    Java NIO(New IO)是從Java 1.4版本開始引入的 一個新的IO API,可以替代標準的Java IO API。 NIO與原來
的IO有同樣的作用和目的,但是使用 的方式完全不同,NIO支持面向緩沖區(qū)的、基于 通道的IO操作。NIO將以更加高效的方
式進行文 件的讀寫操作。

三、異步非阻塞I/O(AIO)

    異步非阻塞I/O,服務器實現(xiàn)模式為一個有效請求一個線程,客戶端的IO請求都是由操作系統(tǒng)先完成了再通知服務器用其
啟動線程進行處理。AIO方式適用于連接數(shù)目多且連接比較長(重操作)的架構,比如相冊服務器,充分調(diào)用OS參與并發(fā)操作,
編程比較復雜,jdk1.7開始支持。

四、同步與異步的區(qū)別

同步:一個人只能先上完小學才能上初中,上完初中才能上高中,最后才可以大學,一步一步來,這是同步。異步:一個人可以一邊聽歌,也可以一邊玩游戲,兩種動作可以同時進行

五、NIO與IO的區(qū)別

Netty中流基礎知識點有哪些

2、NIO的核心

1、定義

    client(客戶端)和server(服務端),把數(shù)據(jù)client傳送到server,或者server傳送到client,就相當于怎么上?;疖囌?
的人群運輸?shù)奖本┗疖囌?,或者北京車站運輸?shù)缴虾;疖囌尽?
channel:北京上海之間的鐵軌
buffer: 火車(可以有多個型號的火車)

2.1 Buffer(緩沖區(qū))

    在Java NIO中負責數(shù)據(jù)的存取,緩沖區(qū)就是數(shù)組,用于存儲不同數(shù)據(jù)類型的數(shù)據(jù),根據(jù)數(shù)據(jù)類型不同,提供了響應
類型的緩沖區(qū):ByteBuffer、CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer、
DoubleBuffer,通過 allocate() 獲取緩沖區(qū)。

2.2 Channel(通道)

    Channel類似于傳送的流,只不過Channel本身不能直接訪問數(shù)據(jù),Channel只能與Buffer進行交互,簡
而言之,Channel 負責傳輸, Buffer 負責存儲。
3、Path 與 Paths

一、Path

booleanendsWith(Stringpath)判斷是否以path路徑結束
booleanstartsWith(Stringpath)判斷是否以path路徑開始
boolean isAbsolute()判斷是否是絕對路徑
PathgetFileName()返回與調(diào)用Path對象關聯(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)文件的復制
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 對象
4、使用IO讀寫操作

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字符串轉換成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中流基礎知識點有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網(wǎng)站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI