InputStream中的read方法


 

  • int read() :

    1.從讀取流讀取的是一個一個字節

    2.返回的是字節的(0-255)內的字節值

    3.讀一個下次就自動到下一個,如果碰到-1說明沒有值了.

     

  • int read(byte[] b) :
    int len = read(arr);如果文件上有數據返回的就是讀到有效的字節個數,如果文件上沒有數據返回的就是-1

 

  • int available():(慎用)

  1.返回從該輸入流中可以讀取(或跳過)的字節數的估計值,而不會被下一次調用此輸入流的方法阻塞。

  2.這個方法可以在讀寫操作前先得知數據流里有多少個字節可以讀取,需要注意的是,如果這個方法用在從本地文件讀取數據時,一般不會遇到問題。

  3這是因為網絡通訊往往是間斷性的,一串字節往往分幾批進行發送。如果是用於網絡操作,會出現問題

  4.如果到達輸入流末尾,則返回 0。

 


 

拷貝文件

  • 逐個字節拷貝
 1 FileInputStream fis = new FileInputStream("致青春.mp3");       //創建輸入流對象,關聯致青春.mp3
 2 FileOutputStream fos = new FileOutputStream("copy.mp3");    //創建輸出流對象,關聯copy.mp3
 3 
 4 int b;
 5 while((b = fis.read()) != -1) {                             //將每次讀到的賦值給b
 6     fos.write(b);                                           //將b中的字節寫出去
 7 }
 8 
 9 fis.close();                                                //關流,釋放資源
10 fos.close();  
  • 自定義數組拷貝
 1 FileInputStream fis = new FileInputStream("致青春.mp3");       //創建輸入流對象,關聯致青春.mp3
 2 FileOutputStream fos = new FileOutputStream("copy.mp3");    //創建輸出流對象,關聯copy.mp3
 3 byte[] arr = new byte[1024 * 8];                            //自定義數組
 4 int len;
 5 while((len = fis.read(arr)) != -1) {                            //將數據讀到字節數組中
 6     fos.write(arr, 0, len);                                 //從字節數組中將數據寫到文件上
 7     //fos.write(arr);
 8 }
 9 
10 fis.close();                                                //關流,釋放資源
11 fos.close();
12 
13 int len = read(arr);如果文件上有數據返回的就是讀到有效的字節個數,如果文件上沒有數據返回的就是-1
  • 定義一個大數組拷貝,數組和文件的字節個數一樣大
1 //fis.available();一次獲取讀的文件的大小
2 FileInputStream fis = new FileInputStream("致青春.mp3");
3 FileOutputStream fos = new FileOutputStream("copy.mp3");
4 byte[] arr = new byte[fis.available()];                     //雖然可以拷貝,但是在開發時不建議,有可能會導致內存溢出
5 fis.read(arr);
6 fos.write(arr);
7 fis.close();
  • 帶緩沖區的拷貝
 1 FileInputStream fis = new FileInputStream("致青春.mp3");       //創建輸入流對象,關聯致青春.mp3
 2 BufferedInputStream bis = new BufferedInputStream(fis);     //對fis進行包裝,內置一個8192大小的字節數組      
 3 FileOutputStream fos = new FileOutputStream("copy.mp3");    //創建輸出流對象,關聯copy.mp3
 4 BufferedOutputStream bos = new BufferedOutputStream(fos);   //對fos進行包裝,內置一個8192大小的字節數組
 5 
 6 int b;
 7 while((b = bis.read()) != -1) {                             //read一次會先將文件上的數據讀到緩沖區中,再從緩沖區一個一個的賦值給b
 8     bos.write(b);                                           //write一次,是將b中的字節數據寫到緩沖區,緩沖區寫滿再一次寫到文件上
 9 }
10 
11 bis.close();                                                //只需要關掉包裝后的即可
12 bos.close();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM