如果是按照資料的流向劃分:
輸入流
輸出流
以當前程式做參照物,觀察資料是流入還是流出,如果流出,則使用輸出流,如果資料是流入,則使用輸入流。
如果按照處理的單位劃分:
位元組流: 位元組流讀取得都是檔案中二進位制資料,讀取到二進位制資料不會經過任何的處理。
字元流: 字元流讀取的資料是以字元為單位的 。 字元流也是讀取檔案中的二進位制資料,不過會把這些二進位制資料轉換成我們能 識別的字元。
字元流 = 位元組流 + 解碼
輸入位元組流:
——–| inputstream 所有輸入位元組流的基類 抽象類
————| fileinputstream 讀取檔案資料的輸入位元組流
使用fileinputstream讀取檔案資料的步驟:
1. 找到目標檔案
2. 建立資料的輸入通道。
3. 讀取檔案中的資料。
4. 關閉 資源.
//方式4:使用緩衝陣列配合迴圈一起讀取。28
public static void readtest4() throws ioexception
//關閉資源
fileinputstream.close();
long endtime = system.currenttimemillis();
system.out.println("讀取的時間是:"+ (endtime-starttime)); //446
}
——–| outputstream 是所有輸出位元組流 的父類。 抽象類
———–| fileoutstream 向檔案輸出資料的輸出位元組流。
fileoutputstream如何使用呢?
1. 找到目標檔案
2. 建立資料的輸出通道。
3. 把資料轉換成位元組陣列寫出。
4. 關閉資源
fileoutputstream要注意的細節:
1. 使用fileoutputstream 的時候,如果目標檔案不存在,那麼會自動建立目標檔案物件。
2. 使用fileoutputstream寫資料的時候,如果目標檔案已經存在,那麼會先清空目標檔案中的資料,然後再寫入資料。
3.使用fileoutputstream寫資料的時候, 如果目標檔案已經存在,需要在原來資料基礎上追加資料的時候應該使用new fileoutputstream(file,true)建構函式,第二引數為true。
4.使用fileoutputstream的write方法寫資料的時候,雖然接收的是乙個int型別的資料,但是真正寫出的只是乙個位元組的資料,只是
把低八位的二進位制資料寫出,其他二十四位資料全部丟棄。
//找到目標檔案
file infile = new file("f:\\美女\\1.jpg");
//建立資料的輸入輸出通道
fileinputstream fileinputstream = new fileinputstream(infile);
fileoutputstream fileoutputstream = new fileoutputstream(destfile); //追加資料....
//每新建立乙個fileoutputstream的時候,預設情況下fileoutputstream 的指標是指向了檔案的開始的位置。 每寫出一次,指向都會出現相應移動。
//建立緩衝資料,邊讀邊寫
byte buf = new byte[1024];
int length = 0 ;
while((length = fileinputstream.read(buf))!=-1)
//關閉資源 原則: 先開後關,後開先關。
fileoutputstream.close();
fileinputstream.close();
fileoutputstream 在檔案末尾追加內容
建立乙個向具有指定 name 的檔案中寫入資料的輸出檔案流。如果第二個引數為 true,則將位元組寫入檔案末尾處,而不是寫入檔案開始處。
new 的時候加乙個true引數則是追加。預設為false,則是覆蓋。
—-| inputstream 輸入位元組流的基類。 抽象
———-| fileinputstream 讀取檔案資料的輸入位元組流
———-| bufferedinputstream 緩衝輸入位元組流 緩衝輸入位元組流的出現主要是為了提高讀取檔案資料的效率。
其實該類內部只不過是維護了乙個8kb的位元組陣列而已。
注意: 凡是緩衝流都不具備讀寫檔案的能力。
使用bufferedinputstream的步驟 :
1. 找到目標檔案。
2. 建立資料 的輸入通道
3. 建立緩衝 輸入位元組流流
4. 關閉資源
——–| outputstream 所有輸出位元組流的基類 抽象類
————| fileoutputstream 向檔案 輸出資料 的輸出位元組流
————| bufferedoutputstream 緩衝輸出位元組流 bufferedoutputstream出現的目的是為了提高寫資料的效率。
內部也是維護了乙個8kb的位元組陣列而已。
使用bufferedoutputstream的步驟:
1. 找到目標檔案
2. 建立資料的輸出通道
bufferedoutputstream 要注意的細節
1. 使用bufferedoutstream寫資料的時候,它的write方法是是先把資料寫到它內部維護的位元組陣列中。
2. 使用bufferedoutstream寫資料的時候,它的write方法是是先把資料寫到它內部維護的位元組陣列中,如果需要把資料真正的寫到硬碟上面,需要
呼叫flush方法或者是close方法、 或者是內部維護的位元組陣列已經填滿資料的時候。
//找到目標檔案
file infile = new file("f:\\美女\\1.jpg");
//建立資料輸入輸出通道
fileinputstream fileinputstream = new fileinputstream(infile);
fileoutputstream fileoutputstream = new fileoutputstream(outfile);
//建立緩衝輸入輸出流
bufferedinputstream bufferedinputstream = new bufferedinputstream(fileinputstream);
bufferedoutputstream bufferedoutputstream = new bufferedoutputstream(fileoutputstream);
//邊讀邊寫
int content = 0;
// int length = bufferedinputstream.read(buf); 如果傳入了緩衝陣列,內容是儲存到緩衝陣列中,返回值是儲存到緩衝陣列中的位元組個數。
while((content = bufferedinputstream.read())!=-1)
//關閉資源
bufferedinputstream.close();
bufferedoutputstream.close();
java IO流 位元組流讀寫中文
位元組流讀取中文的問題 位元組流在讀中文的時候有可能會讀到半個中文,造成亂碼 fileinputstream fis new fileinputstream yyy.txt byte arr new byte 4 int len while len fis.read arr 1 位元組流寫出中文的問...
javaIO之檔案位元組流
解釋 file類主要就是檔案在磁碟上的儲存,以及在磁碟上的一些操作,如重新命名,刪除等。1.1檔案的建立 1 createnewfile 方法 在指定位置建立乙個空檔案,如果檔案已經存在了,那麼就不會建立了。建立成功返回值為true,建立失敗就返回false。2 mkdir 方法 在指定位置建立乙個...
位元組流讀寫
1 inputstream 抽象了應用程式讀取資料的方式 outputstream 抽象了應用程式寫出資料的方式 2 輸入流的基本方法 inputstream in new inputstream int b in.read 讀取乙個位元組無符號填充到int的最後8位,返回的是讀到的位元組 換成in...