流是什麼?
流是程式與外部的資料傳輸通道。輸入流可以看作一個輸入通道,輸出流可以看作一個輸出通道。
位元組流,字元流
按處理資料機關不同分為位元組流、字元流
位元組流:每次讀取(寫出)一個位元組
字元流:每次讀取(寫出)兩個位元組
字元流的由來:
字元流是由Java虛拟機把位元組轉換而來的,過程耗時,不知道編碼類型會出現亂碼.為了更加友善讀寫字元類型的檔案,提供了一個直接操作字元的接口.
(我的了解是,字元流就是在位元組流的基礎上多了轉碼的操作)
字元流與位元組流轉換 (字元流輸入輸出原理)
文本檔案在硬碟中是以位元組流的形式存儲,通過InputStreamReader讀取位元組轉化為字元流給程式處理,程式處理的字元流通過OutputStreamWriter轉換為位元組流儲存。
InputStreamReader 是位元組到字元的橋梁,完成byte流解析為char流,按照編碼解析
OutputStreamWriter 是字元到位元組的橋梁,提供char流到byte流,按照編碼處理
位元組流,字元流的差別:
- 使用範圍: 位元組流可以對所有類型的資料輸入輸出,字元流隻能輸入輸出字元類型的資料
- 操作單元: 位元組流一次操作一個位元組,字元流一次操作兩個位元組
- 緩存: 節流沒有緩沖區,是直接輸出的,而字元流是輸出到緩沖區的。是以在輸出時,位元組流不調用colse()方法時,資訊已經輸出了,而字元流隻有在調用close()方法關閉緩沖區時,資訊才輸出。要想字元流在未關閉時輸出資訊,則需要手動調用flush()方法。
四種最基本流類型:
位元組流: InputStream,OutputStream
字元流: Reader,Writer
輸入流,輸出流
按照流的方向分為:輸入流,輸出流
輸入流示例:
//擷取⽤鍵盤輸⼊資料的常⽤方法
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
String s = input.readLine();
輸出流示例:
未完待續…
參考:
Java-IO流
Java:位元組流和字元流(輸入流和輸出流)