達人科技 2017-01-09 08:56
按照資料的傳輸方向,流 以是未經加工的原始位元據,又可以是經過一定編碼處理後符合某種格式規定的
特定資料,即流是由位(bits)組合或者字元(character)構成的序列,如字元流序列、數字流序列。
將資料從外設或外存(如:鍵盤、滑鼠、檔案)傳遞到應用程式的流稱為輸入資料流(input stream);將資料從應用程式傳遞到外存或外設(螢幕、印表機)的流稱為輸出資料流(output stream)。即:輸入資料流讀取資料(這裡指的是應用程式讀取資料),輸出資料流寫入資料(這裡指的是應用程式寫入資料)。
流式輸入輸出的特點:
1、是資料的擷取和發送是沿著資料序列順序進行,每個資料必須等待排在它前面的資料讀入或者送出之後才能被讀寫,每次讀寫操作處理的都是序列中剩餘的未讀寫資料的第一個,而不能隨選擇輸入輸出的位置。
2、採用資料流來處理輸入輸出使得應用程式的輸入輸出操作獨立於相關裝置,每一個應用程式可以用於多個輸入輸出裝置,而不需要對原始碼作出任何修改。增強了程式的可移植性。
輸入輸出資料流按照處理資料的類型分為:位元組流(bate stream)和字元流(character stream)。位元組流每次讀寫8位位元,由於它只能講資料以二進位的方式讀寫,而不能分解、重組和理解這些資料,所以可以使之變換、恢複到原來的有意義的狀態,因此位元組流有稱為二進位流(binary byte stream)或位流。而字元流一次讀寫16位位元,並將其作為一個字元而不是二進位位來處理。
位元組流:處理位元組資料(基本類型為InputStream、OutputStream)
字元流:處理字元資料(基本類型為Reader、Writer)
檔案類:File,用於對磁碟檔案和檔案夾的管理。即:File是對檔案儲存體的關注,比如檔案最後的修改時間、儲存位置等,而流是對檔案內容的關注。這是二者的區別。
樣本1:在程式中建立一個文字檔file.txt,寫入從鍵盤輸入的一串字元,然後再讀取該檔案並將文字檔的內容顯示在螢幕上。
//filename:FileTest.javaimport java.io.*;class FileTest{ public static void main(String[] args){ char ch; int data; try{ FileInputStream fis = new FileInputStream(FileDescriptor.in);//聲明並建立FileInputStream類型對象,初始化對象為鍵盤輸入 FileOutputStream fos = new FileOutputStream("d:\\myfile.txt");//聲明並建立FileOutputStream類型對象,初始化對象 System.out.println("請輸入一串字串,並以 # 結束:"); while((ch=(char)fis.read) != '#')//強制類型轉換為char並判斷 fos.write(ch); fin.close; fos.close; FileInputStream fi = new FileInputStream("d:\\myfile.txt");//聲明並建立FileInputStream類型對象,初始化對象 FileOutStream fo = new FileOutputStream(FileDescriptor.out);//聲明並建立FileOutputStream類型對象,初始化對象 while(fi.avaliable > 0) { data = fi.read; fo.write(data); } fi.close; fo.close; } catch(FileNotFoundException e){ System.out.println("檔案沒找到"); } }}
樣本2:用FileInputStream和FileOutputStream實現對二進位影像檔的複製
//filename:ImageFileTest.javaimport java.io.*;public Class ImageFileTest{ public static void main(String[] args) throws IOException{ FileInputStream fi = new FileInputStream("d:\\scenery.jpg);//聲明並建立FileInputStream類型的對象,初始化對象 FileOutputStream fo = new FileOutputStream("d:\\copyScenery.jpg");//聲明並建立FileOutputStream類型的對象,初始化對象 byte b = new byte[fi.available()];//建立byte類型的數組 fi.read(b);//將圖形檔案讀入b數組 fo.write(b);//將b數組的資料寫入新檔案'copyScenery.jpg' System.out.println("檔案已被複製並更名"); fi.close; fo.close; }}
本文為頭條號作者發布,不代表今日頭條立場。