1、I/O流
1.1 概念
通俗易懂,不解釋
1.2 分類
- 按照流的流向分,可以分為輸入流和輸出流;
- 按照操作單元劃分,可以劃分為位元組流和字元流;
- 按照流的角色劃分為節點流和處理流。
Java IO 流共涉及 40 多個類,這些類看上去很雜亂,但實際上很有規則,而且彼此之間存在非常緊密的聯系, Java IO 流的 40 多個類都是從如下 4 個抽象類基類中派生出來的。
- nputStream/Reader: 所有的輸入流的基類,前者是位元組輸入流,後者是字元輸入
- OutputStream/Writer: 所有輸出流的基類,前者是位元組輸出流,後者是字元輸出流
1.3 示意圖
- 按操作方式分類結構圖
- 按操作對象分類結構圖
3、既然有了位元組流,為什麼還要有字元流?
- 問題本質想問:
不管是檔案讀寫還是網絡發送接收,資訊的最小存儲單元都是位元組,那為什麼 I/O 流操作要分為位元組流操作和字元流操作呢?
- 回答:字元流是由
将位元組轉換得到的,問題就出在這個過程還算是非常耗時,并且,如果我們不知道編碼類型就很容易出現亂碼問題。是以, I/O 流就幹脆提供了一個直接操作字元的接口,友善我們平時對字元進行流操作。音頻檔案、圖檔等媒體檔案用位元組流比較好,涉及到字元的話使用字元流比較好。Java 虛拟機
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 模型。