java io 流原理
資料流是接收資料或傳送資料的管道
流的單向性:
可以從輸入流讀,但不能從輸入流寫
可以從輸出流寫,但不能從輸出流讀
1.io流是阻塞式的,在阻塞模式中,執行緒將在讀或寫時阻塞,一直到讀或寫操作徹 底完成。如果在讀的時候,資料尚未完全到達,則執行緒將在讀操作上阻塞,一直到資料可用。
nio流是非阻塞的,在非阻塞模式中,執行緒將讀取已經可用的資料(不論多少),然後返回執行其它任務,速度快,效率高。
原來的阻塞方式可能會造成大量的thread進入阻塞狀態,佔用大量的系統資源,現在的非阻塞方式避免了這個問題。
2.Java 中所有的I/O流都基於四個基類:
輸入流:InputStream ,Reader
輸出流: OutputStream,Writer
InputStream 和 OutputStream是面向位元組的,Reader和Writer是面向Unicode字元的。
從位元組流到字元流的轉換:
例如:InputStream istream = new FileInputStream("C:/temp.txt");
InputStreamReader isr = new InputStreamReader(istream);
同理,從字元流到位元組流的轉換:
從字元流中獲取char[]陣列,轉換為String,然後呼叫String的API函式getBytes() 獲取到byte[]
3.流的巢狀形成流鏈
流分為底層流和高層流,高層流是繼承FilterInputStream和FilterOutputStream
高層流的使用必須以底層流作基礎,比如:
FileInputStream f = new FileInputStream("你好");
BufferedInputStream bis = new BufferedInputStream( f);
DataInputStream dis = new DataInputStream(bis);
形成一個流鏈,增強流的功能,比如嵌上DataInputStream後,流具備讀任何物件的能力