標籤:原理 輸入資料流 父類 音頻 實現 位元組 writer 變數 while
* IO流用來處理裝置之間的資料轉送
* Java對資料的操作是通過流的方式
* Java用於操作流的類都在IO包中
* 流按流向分為兩種:輸入資料流,輸出資料流。
* 流按操作類型分為兩種:
* 位元組流 : 位元組流可以操作任何資料,因為在電腦中任何資料都是以位元組的形式儲存的
* 字元流 : 字元流只能操作純字元資料,比較方便。
* IO流常用父類
* 位元組流的抽象父類:
* InputStream
* OutputStream
* 字元流的抽象父類:
* Reader
* Writer
* IO程式書寫
* 使用前,匯入IO包中的類
* 使用時,進行IO異常處理
* 使用後,釋放資源
###IO流(FileInputStream)
* read()一次讀取一個位元組
*
FileInputStream fis = new FileInputStream("aaa.txt");//建立一個檔案輸入資料流對象,並關聯aaa.txt
int b;//定義變數,記錄每次讀到的位元組
while((b = fis.read()) != -1) {//將每次讀到的位元組賦值給b並判斷是否是-1
System.out.println(b);//列印每一個位元組
}
fis.close();//關閉流釋放資源
###IO流(read()方法傳回值為什麼是int)
* read()方法讀取的是一個位元組,為什麼返回是int,而不是byte
*
因為位元組輸入資料流可以操作任意類型的檔案,比片音頻等,這些檔案底層都是以二進位形式的儲存的,如果每次讀取都返回byte,有可能在讀到中間的時候遇到111111111
那麼這11111111是byte類型的-1,我們的程式是遇到-1就會停止不讀了,後面的資料就讀不到了,所以在讀取的時候用int類型接收,如果11111111會在其前面補上
24個0湊足4個位元組,那麼byte類型的-1就變成int類型的255了這樣可以保證整個資料讀完,而結束標記的-1就是int類型
###20.04_IO流(FileOutputStream)
* write()一次寫出一個位元組
*
FileOutputStream fos = new FileOutputStream("bbb.txt");//如果沒有bbb.txt,會建立出一個
//fos.write(97);//雖然寫出的是一個int數,但是在寫出的時候會將前面的24個0去掉,所以寫出的一個byte
fos.write(98);
fos.write(99);
fos.close();
###IO流(FileOutputStream追加)
* A:案例示範
* FileOutputStream的構造方法寫出資料如何?資料的追加寫入
*
FileOutputStream fos = new FileOutputStream("bbb.txt",true);//如果沒有bbb.txt,會建立出一個
//fos.write(97);//雖然寫出的是一個int數,但是在寫出的時候會將前面的24個0去掉,所以寫出的一個byte
fos.write(98);
fos.write(99);
fos.close();
###IO流(拷貝圖片)
* FileInputStream讀取
* FileOutputStream寫出
FileInputStream fis = new FileInputStream("致青春.mp3");//建立輸入資料流對象,關聯致青春.mp3
FileOutputStream fos = new FileOutputStream("copy.mp3");//建立輸出資料流對象,關聯copy.mp3
int b;
while((b = fis.read()) != -1) {
fos.write(b);
}
fis.close();
fos.close();
###IO流(拷貝音頻檔案畫原理)
* 位元組流一次讀寫一個位元組複製音頻
* 弊端:效率太低
###IO流(位元組數組拷貝之available()方法)
* A:案例示範
* int read(byte[] b):一次讀取一個位元組數組
* write(byte[] b):一次寫出一個位元組數組
* available()擷取讀的檔案所有的位元組個數
* 弊端:有可能會記憶體溢出
FileInputStream fis = new FileInputStream("致青春.mp3");
FileOutputStream fos = new FileOutputStream("copy.mp3");
byte[] arr = new byte[fis.available()];//根據檔案大小做一個位元組數組
fis.read(arr);//將檔案上的所有位元組讀取到數組中
fos.write(arr);//將數組中的所有位元組一次寫到了檔案上
fis.close();
fos.close();
###IO流(定義小數組)
* write(byte[] b)
* write(byte[] b, int off, int len)寫出有效位元組個數
###IO流(定義小數組的標準格式)
* A:案例示範
* 位元組流一次讀寫一個位元組數組複製圖片和視頻
FileInputStream fis = new FileInputStream("致青春.mp3");
FileOutputStream fos = new FileOutputStream("copy.mp3");
int len;
byte[] arr = new byte[1024 * 8];//自訂位元組數組
while((len = fis.read(arr)) != -1) {
//fos.write(arr);
fos.write(arr, 0, len);//寫出位元組數組寫出有效個位元組個數
}
fis.close();
fos.close();
java IO流