1. 程式人生 > 其它 >5.檔案位元組流-通過緩衝區來提高讀寫效率

5.檔案位元組流-通過緩衝區來提高讀寫效率

1.通過緩衝區提高讀取效率-方式一

通過建立位元組陣列作為緩衝區,提高讀寫效率,這邊固定了1024位元組

舉個例子:有2048斤大米。如果沒有定義緩衝區,就像是一粒一粒的搬回家,建立了快取區,1024位元組,就類似你有個口袋,這個口袋可以裝1024斤大米,這樣你搬2次,就可以全部搬完

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class Dome03 {
   public static void main(String[] args) {
       FileInputStream fis = null;
       FileOutputStream fos = null;
       try {
           //建立位元組流輸入物件
           fis = new FileInputStream("d:/zm.png");
           //建立位元組流輸出物件
           fos = new FileOutputStream("d:/dome.png");
           //建立緩衝區
           byte [] buff = new byte[1024];
           int temp = 0;
           while ((temp = fis.read(buff)) != -1) {//讀取到緩衝區
               //從緩衝區讀取
               fos.write(buff,0,temp);//這一步只是把檔案位元組流寫到了記憶體中
          }
           fos.flush();//這一步才是把檔案位元組流寫到磁碟中
      } catch (Exception e) {
           e.printStackTrace();
      } finally {
           try {
               if (fis != null) {
                   fis.close();
              }
               if (fos != null) {
                   fos.close();
              }
          } catch (Exception e) {
               e.printStackTrace();
          }
      }
  }
}

2.通過緩衝區提高讀取效率-方式二

通過建立位元組陣列作為緩衝區,提高讀寫效率,這邊使用了檔案大小作為緩衝區大小,但是如果檔案過大,那對記憶體的佔用也是很大的,所以檔案過大時,不建議使用此方式

舉個例子:相比較於方式一,有的人力氣大,一下子可以扛2048斤大米,這樣一次就可以全部搬回家了

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class Dome03 {
   public static void main(String[] args) {
       FileInputStream fis = null;
       FileOutputStream fos = null;
       try {
           //建立位元組流輸入物件
           fis = new FileInputStream("d:/zm.png");
           //建立位元組流輸出物件
           fos = new FileOutputStream("d:/dome.png");
           //建立緩衝區
           byte[] buff = new byte[fis.available()];//通過計算檔案大小來決定緩衝區的大小
           fis.read(buff);//讀取檔案到緩衝區
           fos.write(buff);//從緩衝區讀取檔案~這一步只是把檔案位元組流寫到記憶體中
           fos.flush();//這一步才是把檔案位元組流寫到磁碟中
      } catch (Exception e) {
           e.printStackTrace();
      } finally {
           try {
               if (fis != null) {
                   fis.close();
              }
               if (fos != null) {
                   fos.close();
              }
          } catch (Exception e) {
               e.printStackTrace();
          }
      }
  }
}