缓冲流为了提高读写效率,缓冲流不能直接作用于文件,只能作用于节点流
速度提升非常明显
使用 BufferedInputStream、 BufferedOutputStream
读和写同字节流和字符流
复制:
@Test
public void copy() throws IOException {
FileInputStream fis = null;
FileOutputStream fos = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
File file1 = new File("C:\\Users\\11027\\Downloads\\潘石屹谈中国房价:是真实还是陷阱(中国已全网查删).mp4");
File file2 = new File("C:\\Users\\11027\\Downloads\\潘石屹谈中国房价:是真实还是陷阱(中国已全网查删)2.mp4");
fis = new FileInputStream(file1);
fos = new FileOutputStream(file2);
bis = new BufferedInputStream(fis);
bos = new BufferedOutputStream(fos);
byte[] buffer = new byte[10];
int len;
while ((len=bis.read(buffer))!=-1){
//write方法里有自动flush方法,所有这里就不用手动flush了
bos.write(buffer,0,len);
}
} finally {
if (bis!=null)
bis.close();
if(bos!=null)
bos.close();
//外层流关闭后内层流会自动关闭,所有内层流关闭可以省略
if(fis!=null)
fis.close();
if(fos!=null)
fos.close();
}
}
使用: BufferedReader、 BufferedWriter
除了按照上面的方法,还可以使用readLine方法
@Test
public void copy2() throws IOException {
FileReader fileReader = null;
FileWriter fileWriter = null;
BufferedReader br = null;
BufferedWriter bw = null;
try {
File file1 = new File("a.txt");
File file2 = new File("c.txt");
fileReader = new FileReader(file1);
fileWriter = new FileWriter(file2);
br = new BufferedReader(fileReader);
bw = new BufferedWriter(fileWriter);
String str="";
while ((str = br.readLine())!=null){
bw.write(str+"\n");
}
} finally {
if (br!=null)
br.close();
if(bw!=null)
bw.close();
}
}```