從不同的角度對流進行分類:
1、處理的數(shù)據(jù)單位不同,分為:字符流 字節(jié)流
2、數(shù)據(jù)流方向不同,可分為:輸入流,輸出流
3、功能不同,分為:節(jié)點流,處理流
字節(jié)流byte streams:
字節(jié)流是執(zhí)行基于8位字節(jié)的輸入和輸出,一次讀寫一節(jié)的數(shù)據(jù)。字節(jié)流是I/O的最底層流技術。如果你正閱讀或者寫入字符數(shù)據(jù)的最佳方法是使用字符流,其他流建立在字節(jié)之上
字符流 character streams:
字符流是執(zhí)行基于16位字節(jié)(即兩字節(jié))的輸入和輸出,它一次讀寫一個字符(兩個字節(jié))的數(shù)據(jù)。所有的字符流類都是從Reader、Writer兩個類延伸下來的,我們可以使用FileReader、FileWriter類進行讀寫I/O文件
節(jié)點流:
從一個特定的數(shù)據(jù)源讀寫數(shù)據(jù),節(jié)點流是直接操作文件,網(wǎng)絡的流。如FileInputStream和FileOutputStream,他們直接從文件中讀取或往文件中寫入字節(jié)流。
處理流:
“連接”在已存在的流(節(jié)點流或處理流)之上通過對數(shù)據(jù)的處理為程序提供更為強大的讀寫功能。過濾流是使用一個已經(jīng)存在的輸入流或輸出流連接創(chuàng)建的,過濾流就是對節(jié)點流進行一系列的包裝。例如BufferedInputStream和BufferedOutputStream,使用已經(jīng)存在的節(jié)點流來構(gòu)造,提供帶緩沖的讀寫,提高了讀寫的效率,以及DataInputStream和DataOutputStream,使用已經(jīng)存在的節(jié)點流來構(gòu)造,提供了讀寫Java中的基本數(shù)據(jù)類型的功能。他們都屬于過濾流。
BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter,是帶緩沖區(qū)的處理流。
緩沖流的作用:
避免每次跟磁盤打交道,提高數(shù)據(jù)的訪問效率。(提高流的操作率),所以在緩沖區(qū)之前必須要有流對象。
利用緩沖區(qū)技術字符流讀取操作。(BufferedReader) 步驟:
1,定義流對象與被讀取文件相關聯(lián)FileReader fr=newFileReader("f:\\1.txt");
2,定義緩沖區(qū),把流對象作為參數(shù)放進緩沖區(qū):
BufferedReader br=new BufferedReader(fr);
3,利用while循環(huán),一行一行的讀?。?/span>br.readLine();此處返回類型是一個String,如果返回為null說明已讀取到末尾處)
String len=null;
while((len=br.readLine())!=null){
System.out.println("讀出了:"+len);
}
4,最后關閉資源。
readLine原理:
無論是讀一行,獲取多個字符,最終都是從硬盤上一個一個的讀取,都是使用read方法中一次讀取一個字符的方法。readLine中封裝了數(shù)組,每讀一個就放在緩沖區(qū)中(不立即返回),當讀到\r\n時,表示讀取一行結(jié)束,因此此時就返回一行數(shù)據(jù)。
流是一個很形象的概念,當程序需要讀取數(shù)據(jù)的時候,就會開啟一個通向數(shù)據(jù)源的流,這個數(shù)據(jù)源可以是文件,內(nèi)存,或是網(wǎng)絡連接。類似的,當程序需要寫入數(shù)據(jù)的時候,就會開啟一個通向目的地的流。