通过创建一个指定长度的字节数组作为缓冲区,以此来提高IO流的读写效率。该方式适用于读取较大文件时的缓冲区定义。注意:缓冲区的长度一定是2的整数幂。一般情况下1024长度较为合适。
public class TestFileByteBuffer {
public static void main(String[] args){
long time1 = System.currentTimeMillis();
copyFile("d:/1.jpg","d:/2.jpg");
long time2 = System.currentTimeMillis();
System.out.println(time1 - time2);
}
/**
* @param src 源文件
* @param desc 目标文件
*/
public static void copyFile(String src,String desc){
//"后开的先关闭!"按照它们被创建顺序的逆序来关闭
try(FileInputStream fis = new FileInputStream(src);
FileOutputStream fos = new FileOutputStream(desc)){
//创建一个缓冲区,提高读写效率
byte[] buffer = new byte[1024];
int temp = 0;
while((temp = fis.read(buffer)) != -1){
//将缓存数组中的数据写入文件中,注意:写入的是读取的真实长度
fos.write(buffer,0,temp);
}
//将数据从内存中写入到磁盘中
fos.flush();
}catch(IOException e){
e.printStackTrace();
}
}
}
在使用字节缓冲区时,我们需要注意:
为了减少对硬盘的读写次数,提高效率,通常设置缓存数组。相应的,读取时使用的方法为:read(byte[] b); 写入时的方法为:write(byte[] b,int off,int length)
程序中如果遇到多个流,每个流都要单独关闭,防止其中一个流出现异常后导致其他流无法关闭的情况。
37

被折叠的 条评论
为什么被折叠?



