缓冲流

1.缓冲流涉及到的类

  • BufferedInputStream
  • BufferedOutputStream
  • BufferedReader
  • BufferedWriter

2.作用

  • 提升流的读取、写入的速度。
  • 原因:内部提供了一个缓冲区,默认情况下是8192,即8kb。

3.使用BufferedInputStream和BufferedOutputStream

处理非文本文件

//实现文件复制的方法
public void copyFileWithBuffered(String srcPath,String destPath) {
FileInputStream fis = null;
FileOutputStream fos = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
//1.
File srcfile = new File(srcPath);
File destfile = new File(destPath); //2.
//2.1造节点流
fis = new FileInputStream(srcfile);
fos = new FileOutputStream(destfile); //2.2造缓冲流
bis = new BufferedInputStream(fis);
bos = new BufferedOutputStream(fos); //3.
byte[] buffer = new byte[1024];
int len;
while ((len = bis.read(buffer)) != -1){
bos.write(buffer,0,len);       // bos.flush();//刷新缓冲区
}
System.out.println("复制成功");
} catch (IOException e) {
e.printStackTrace();
} finally {
//4.要求:先关闭外层的流,再关闭内层的流
if (bos != null){
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bis != null){
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} //说明:关闭外层流的同时,内层流也会自动的进行关闭,关于内层流的关闭,我们可以省略
// fos.close();
// fis.close();
}

对上述方法进行测试:

@Test
public void testCopyBuffererd(){
long start = System.currentTimeMillis();
String srcPath = "1.jpg";
String destPath = "6.jpg";
copyFileWithBuffered(srcPath,destPath);
long end = System.currentTimeMillis();
System.out.println("复制所需要的毫秒数为:"+ (end - start));
}

4.使用BufferedReader和BufferedWriter:处理文本文件

//使用BufferedReader和BufferedWriter实现文本文件的复制

@Test
public void test6(){
BufferedReader br = null;
BufferedWriter bw = null; try {
//使用匿名方式,创建文件和相应的流
br = new BufferedReader(new FileReader(new File("dbcp.txt")));
bw = new BufferedWriter(new FileWriter(new File("dbcp1.txt"))); //读写操作
//方式一:使用char[]数组
// char[] cbuf = new char[1024];
// int len;
// while ((len = br.read(cbuf)) != -1){
// bw.write(cbuf,0,len);
// bw.flush();//刷新操作
// }
//方式二:使用String
String data;
while ((data = br.readLine()) != null){
bw.write(data);
bw.newLine();//提供换行的操作
}
System.out.println("复制成功");
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭资源
try {
if (bw != null){
bw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if (br != null){
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
05-27 13:56