方式一
通过创建一个指定长度的字节数组作为缓冲区,以此来提高 IO 流的读写效率。该方式 适用于读取较大图片时的缓冲区定义。注意:缓冲区的长度一定是 2 的整数幂。一般情况下 1024 长度较为合适
import java.io.FileInputStream;import java.io.FileOutputStream;public class FileStreamDemo {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[1024];int temp=0;while((temp=fileInputStream.read(buff))!=-1){ //电脑创建了一个缓冲区,把数据读到缓冲区fileOutputStream.write(buff,0,temp);}fileOutputStream.flush();//将数据从内存中读取到磁盘中。实现了复制的功能}catch (Exception e){e.printStackTrace();}finally {try{if(fileInputStream!=null){fileInputStream.close();}}catch (Exception e){e.printStackTrace();}}}}
方式二
通过创建一个字节数组作为缓冲区,数组长度是通过输入流对象的 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();
            }
        }
    }
}
                    