其他分享
首页 > 其他分享> > 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();
          }
      }
  }
}

 

标签:fis,字节,fos,读写,缓冲区,new,null
来源: https://www.cnblogs.com/lyq888/p/16126973.html