關於Java IO InputStream 的一點整理!

程序的開發當中一直在用文件的讀寫,但是對於java當中輸入流以及輸出流只是會用不理解,一直以來想搞清楚其,但是一直沒有執行(悲劇),今天早上抽出半個小時通過JDK API1.6.0中文版幫助逐步的瞭解下字節輸入流讀取字節的方法;
下面就說說InputStream當中read()read(byte[]  b)read(byte[] bint off int len)的使用以及區別

一、read()方法:
public static void inputStreamRead1() {
      try{
            //構造一個輸入流對象(讀數據)test.txt文本的內容爲:我愛你中國
            InputStream is = new FileInputStream(“E:\\test.txt”);
            //構造一個輸出流對象(寫數據)
            OutputStream os = new FileOutputStream(“E:\\ctest.txt”);
            int len;//表示讀入的數據(十進制的形式表示)
            //FileInputStream可以使用read()方法一次讀取一個字節,讀入的數據以int類型返回,所以,你要是使用System.out.println()將數據顯示出來的時候是以10進制的方式顯示
            while((len = is.read())!=-1){
                 System.out.println(“len=”+len);
                 os.write(len);
           }
           os.close();
           is.close();
     }catch(Exception e){
            e.printStackTrace();
     }
}
運行以上程序,則控制檯的輸出爲:
如圖
圖片1.png
說明:我愛你中國爲5個漢字,5個漢字則爲10個字節,而read()方法爲一個字節一個字節的讀,所以讀取10次,而後len的值則爲漢字的10進製表示
2、read(byte[] b)方法:
public static void inputStreamRead2(){
     try{
           //構造輸入流對象(讀數據)test.txt文本的內容爲多個我愛你中國
           InputStream is = new FileInputStream(“E:\\test.txt”);
           //構造輸出流對象(寫數據)
           OutputStream os = new FileOutputStream(“E:\\ctest.txt”);
           //創建一個長度爲1024byte數組
           byte[] b = new byte[1024];
           //int len;表示成功讀取的字節數的個數
           //FileInputStream可以使用read(byte[] b )每次讀取多個(b.length)字節數據(每次最多讀取多少個)到byte數組當中
           while((len = is.read(b))!=-1){
               System.out.println(“len=”+len);
               os.write(b);
           }
           os.close();
           is.close();
      }catch(Exception e){
           e.printStackTrace();
      }
}
運行上面的程序則控制檯的輸出爲:
如圖
圖片2.png
說明:每次最多讀取1024個字節,很明顯使用這種方式的效率要高於read()讀取的效率,開發的過程當中也見識使用此方式進行讀取;
3、read(byte[] b,int off,intlen):
1public static void inputStreamRead3(){
          try{
                //構建輸入流對象(讀文件)
                InputStream is = new FileInputStream(“E:\\test.txt”);
                //構建輸出流對象(寫文件)
                OutputStream os = new FileOutputStream(“E:\\ctest.txt”);
               //聲明一個大小爲輸入流大小的數組
                byte[] b = new byte[is.available()];
                int len = 0;//表示成功讀取的字節數的個數
                while(len<is.available()){
                     //read(byte[] b,int off, int len)表示從輸入流當中最多將len個字節的數據讀取到一個byte數組當中
                     len+=is.read(b, len, is.available() - len);
                     os.write(b);
                }
                os.close();
                is.close();
           }catch{
                   e.printStackTrace();
           }
}
運行上面的程序控制臺的輸出爲:
如圖
圖片3.png
說明:則一次性讀取完成
2public static void inputStreamRead3(){
          try{
                //構建輸入流對象(讀文件)
                InputStream is = new FileInputStream(“E:\\test.txt”);
               //構建輸出流對象(寫文件)
                OutputStream os = new FileOutputStream(“E:\\ctest.txt”);
               //聲明一個大小爲輸入流大小的數組
                byte[] b = new byte[1024];
                int len = 0;//表示成功讀取的字節數的個數
                while((len=is.read(b,len,1024))!=-1){
                      System.out.println(“len=”+len);
                      os.write(b);
                }
                os.close();
                is.close();
           }catch{
               e.printStackTrace();
           }
}
說明:運行上面的程序控制臺的輸出爲:
如圖
圖片4.png
則一次最多讀取1024個字節


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