方式一

通过创建一个指定长度的字节数组作为缓冲区,以此来提高 IO 流的读写效率。该方式 适用于读取较大图片时的缓冲区定义。注意:缓冲区的长度一定是 2 的整数幂。一般情况下 1024 长度较为合适

  1. import java.io.FileInputStream;
  2. import java.io.FileOutputStream;
  3. public class FileStreamDemo {
  4. public static void main(String[] args) {
  5. FileInputStream fileInputStream=null;
  6. FileOutputStream fileOutputStream=null;
  7. try{
  8. //创建字节输入流对象
  9. fileInputStream=new FileInputStream("d:/javaStudy/javaworkspace/984614.jpg");
  10. //创建字节输出流
  11. fileOutputStream=new FileOutputStream("d:/javaStudy/javaworkspace/rog.jpg");
  12. //创建一个缓冲区
  13. byte[] buff=new byte[1024];
  14. int temp=0;
  15. while((temp=fileInputStream.read(buff))!=-1){ //电脑创建了一个缓冲区,把数据读到缓冲区
  16. fileOutputStream.write(buff,0,temp);
  17. }
  18. fileOutputStream.flush();//将数据从内存中读取到磁盘中。实现了复制的功能
  19. }catch (Exception e){
  20. e.printStackTrace();
  21. }finally {
  22. try{
  23. if(fileInputStream!=null){
  24. fileInputStream.close();
  25. }
  26. }catch (Exception e){
  27. e.printStackTrace();
  28. }
  29. }
  30. }
  31. }

方式二

  1. 通过创建一个字节数组作为缓冲区,数组长度是通过输入流对象的 available()返回当前 文件的预估长度来定义的。在读写文件时,是在一次读写操作中完成文件读写操作的。注意: 如果文件过大,那么对内存的占用也是比较大的。所以大文件不建议使用该方法。
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class FileStreamDemo2 {
    public static void main(String[] args) {
        FileInputStream fileInputStream=null;
        FileOutputStream fileOutputStream=null;
        try{
            //创建字节输入流对象
            fileInputStream=new FileInputStream("d:/javaStudy/javaworkspace/984614.jpg");
            //创建字节输出流
            fileOutputStream=new FileOutputStream("d:/javaStudy/javaworkspace/rog.jpg");
            //创建一个缓冲区
            byte[] buff=new byte[fileInputStream.available()]; //available()预估写入的大小,返回一个整型
            fileInputStream.read(buff);
            fileOutputStream.write(buff);
            fileOutputStream.flush();//将数据从内存中读取到磁盘中。实现了复制的功能
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try{
                if(fileInputStream!=null){
                    fileInputStream.close();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}