1. 程式人生 > >java io 流原理

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後,流具備讀任何物件的能力