關於Java中IO流部分的知識總結

字節流:

輸入流: InputStream (抽象類)

輸入流子類:FileInputStream

高效輸入流:BufferedInputStream

輸出流:OutputStream(抽象類)

輸出流子類:FileOutputStream

高效輸出流:BufferedOutputStream

字符流:

輸入流:Reader(抽象類)

輸入流子類:FileReader

高效輸入流:BufferedReader

輸出流:

輸出流子類:FileWriter

高效輸出流:BufferedWriter

轉換流:

輸入流:InputStreamReader 【字節流通向字符流的橋樑】 可以指定在讀取文件時的編碼(字符集)

輸出流:OutPutStreamWriter【字符流通向字節流的橋樑】 可以指定寫入文件時的編碼(字符集)


字節流又被稱作是萬能流,因爲計算機上所有的文件,無論是什麼類型,都是以字節的形式存儲在硬盤上的,在對文件進行IO操作時,以字節流的形式進行讀寫,

可以避開因字符集的不同導致文件被破壞。

總結起來說,在只拷貝而不對外輸出顯示的話,使用字節流是最好的,但是在輸出顯示含有中文的文本文件時,需要用字符流,以避免因字符編碼問題導致

文件內容輸出時亂碼。而且,因爲字符流=字節流+編碼(字符集),所以在讀寫視頻音頻文件時,使用字符流會導致文件破壞,無法打開!

對於高效流來說,如果是對文件進行copy之類的操作時,使用BufferedInputStream和BufferedOutputStream((高效字節流))是最快的。

但是如果涉及每次讀取文本中一行數據,那麼只能使用BufferedReader和BufferedWriter(高效字符流)


Java IO操作的格式:

  以轉換流按指定碼錶讀寫文件爲例:

public class Test02{
public static void main(String[] args) throws IOException {
/*
* 將utf-8.txt(utf-8編碼格式)文件中的內容複製到 gbk.txt(gbk編碼格式)文件中.
* 注意:
* utf-8碼錶中, 一箇中文佔3個字節.
* gbk碼錶中, 一箇中文佔2個字節.
*/
//1. 創建輸入流對象, 封裝數據源文件


FileInputStream fis = new FileInputStream("utf-8.txt");
InputStreamReader isr = new InputStreamReader(fis,"utf-8");

//2. 創建輸出流對象, 封裝目的地文件.


FileOutputStream fos = new FileOutputStream("gbk.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos,"gbk");
//3. 定義變量, 用來記錄讀取到的有效字符數.


int len = 0;
char[] chs = new char[1024];


//4. 循環讀取文件, 只要條件滿足就一直讀去, 並將讀取到的有效字符數賦值給變量.


while((len = isr.read(chs)) != -1) {
//5. 將讀取到的內容寫入到文件中

osw.write(chs, 0, len);
}
//6. 關流,釋放資源.
isr.close();
osw.close();

System.out.println("拷貝完成");
}
}






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章