方式一
通过创建一个指定长度的字节数组作为缓冲区,以此来提高 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();
}
}
}
}