第十三章 缓冲流(BufferedInputStream ,BufferedOutputStream,BufferedReader,BufferedWriter)
1.缓冲流:处理流的一种
BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
2.作用:
提供流的读取,写入的速度。
提高读写速度的原因:内部提供了一个缓冲区。
3.实现非文本文件的复制
/**
* 实现非文本文件的复制
*/
@Test
public void BufferedStreamTest() {
BufferedInputStream bis= null;
BufferedOutputStream bos= null;
try {
//1.造文件
File srcFile=new File("lay1.jpg");
File destFile=new File("lay3.jpg");
//2.造流:先造内层,后造外层
//2.1造节点流
FileInputStream fis=new FileInputStream(srcFile);
FileOutputStream fos=new FileOutputStream(destFile);
//2.2造缓冲流
bis = new BufferedInputStream(fis);
bos = new BufferedOutputStream(fos);
//3.复制的细节:读取,写入
byte[] buffer=new byte[10];
int len;
while ((len=bis.read(buffer))!=-1){
bos.write(buffer,0,len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if(bos!=null){
try {
//4.资源关闭
//要求:先关外层的流,后关内层的流
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(bis!=null){
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//说明:关闭外层流的同时,内层流也会自动的进行关闭,关于内层流的关闭,我们可以省略
// fos.close();
// fis.close();
//
}
4.实现文件复制的方法
/**
* 实现文件复制的方法
*/
public void copyFileBuffered(String srcPath,String destPath){
BufferedInputStream bis= null;
BufferedOutputStream bos= null;
try {
//1.造文件
File srcFile=new File(srcPath);
File destFile=new File(destPath);
//2.造流:先造内层,后造外层
//2.1造节点流
FileInputStream fis=new FileInputStream(srcFile);
FileOutputStream fos=new FileOutputStream(destFile);
//2.2造缓冲流
bis = new BufferedInputStream(fis);
bos = new BufferedOutputStream(fos);
//3.复制的细节:读取,写入
byte[] buffer=new byte[10];
int len;
while ((len=bis.read(buffer))!=-1){
bos.write(buffer,0,len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if(bos!=null){
try {
//4.资源关闭
//要求:先关外层的流,后关内层的流
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(bis!=null){
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@Test
public void testCopyFileBuffered(){
long start=System.currentTimeMillis();
String srcPath="lay1.jpg";
String destPath="lay4.jpg";
copyFileBuffered(srcPath,destPath);
long end=System.currentTimeMillis();
System.out.println("复制花费时间为:"+(end-start));
}
5.使用BufferedReader和BufferedWriter实现文本文件的复制
/**
* 使用BufferedReader和BufferedWriter实现文本文件的复制
*/
@Test
public void testBufferReaderWriter(){
BufferedReader br= null;
BufferedWriter bw= null;
try {
//创建文件和相应的流,把创建文件和流放在一起
br = new BufferedReader(new FileReader(new File("fighting.txt")));
bw = new BufferedWriter(new FileWriter(new File("fighting1.txt")));
// //读写操作
//方式一
// char[] cbuffer=new char[1024];
// int len;
// while ((len=br.read(cbuffer))!=-1){
// bw.write(cbuffer,0,len);
// }
//方式二:使用String
String data;
while ((data=br.readLine())!=null){
//方法一:+\n换行
bw.write(data+"\n");//data中不包含换行符
//方法二
// bw.newLine();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if(bw!=null){
try {
//关闭资源
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(br!=null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}