天天看點

java:I/O流

1、I/O流

1.1 概念

通俗易懂,不解釋

1.2 分類

  • 按照流的流向分,可以分為輸入流和輸出流;
  • 按照操作單元劃分,可以劃分為位元組流和字元流;
  • 按照流的角色劃分為節點流和處理流。

Java IO 流共涉及 40 多個類,這些類看上去很雜亂,但實際上很有規則,而且彼此之間存在非常緊密的聯系, Java IO 流的 40 多個類都是從如下 4 個抽象類基類中派生出來的。

  • nputStream/Reader: 所有的輸入流的基類,前者是位元組輸入流,後者是字元輸入
  • OutputStream/Writer: 所有輸出流的基類,前者是位元組輸出流,後者是字元輸出流

1.3 示意圖

  • 按操作方式分類結構圖
    java:I/O流
  • 按操作對象分類結構圖
    java:I/O流

3、既然有了位元組流,為什麼還要有字元流?

  • 問題本質想問:

    不管是檔案讀寫還是網絡發送接收,資訊的最小存儲單元都是位元組,那為什麼 I/O 流操作要分為位元組流操作和字元流操作呢?

  • 回答:字元流是由

    Java 虛拟機

    将位元組轉換得到的,問題就出在這個過程還算是非常耗時,并且,如果我們不知道編碼類型就很容易出現亂碼問題。是以, I/O 流就幹脆提供了一個直接操作字元的接口,友善我們平時對字元進行流操作。音頻檔案、圖檔等媒體檔案用位元組流比較好,涉及到字元的話使用字元流比較好。

4、擷取鍵盤輸入常用的兩種方法

4.1 通過 Scanner

Scanner input = new Scanner(System.in);
String s  = input.nextLine();
input.close();
           

4.2 通過 BufferedReader

BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
String s = input.readLine();
           

5、有哪些常見的 IO 模型?

UNIX 系統下, IO 模型一共有 5 種: 同步阻塞 I/O、同步非阻塞 I/O、I/O 多路複用、信号驅動 I/O 和異步 I/O。這也是我們經常提到的 5 種 IO 模型。