/*
处理流之一:缓冲流的使用
1.缓冲流:
BufferedInputStream
BufferedOutputStream
- BufferedReader
BufferedWriter
2.作用:提高流的读取、写入的速度
提高读写速度的原因:内部提供了一个缓冲区
* 3.处理流,就是“套接”__在已有的流的基础上
*
字节缓冲流
package com.atguigu.java1;import org.junit.Test;import java.io.*;/*** 处理流之一:缓冲流的使用** 1.缓冲流:* BufferedInputStream* BufferedOutputStream* BufferedReader* BufferedWriter** 2.作用:提高流的读取、写入的速度* 提高读写速度的原因:内部提供了一个缓冲区** 3.处理流,就是“套接”在已有的流的基础上*** @author Dxkstart* @create 2021-05-30 14:29*/public class BufferedTest {/*实现非文本文件的复制*/@Testpublic void BufferedSreamTest(){BufferedInputStream bis = null;BufferedOutputStream bos = null;try {//1.造文件File file1 = new File("爱丽丝1.jpg");File file2 = new File("爱丽丝2.jpg");//2.造流//2.1 造节点流FileInputStream fis = new FileInputStream(file1);FileOutputStream fos = new FileOutputStream(file2);//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 {//4.关闭流资源//要求:先关闭外层的流,再关闭内层的流//说明:关闭外层的流的同时,内层流也会自动的进行关闭。关于内层流的关闭,我们可以省略try {if(bis != null)bis.close();} catch (IOException e) {e.printStackTrace();}try {if(bos != null)bos.close();} catch (IOException e) {e.printStackTrace();}}}//实现文件复制的方法public void copyFileWithBuffered(String srcPath,String destPath){BufferedInputStream bis = null;BufferedOutputStream bos = null;try {//1.造文件File file1 = new File(srcPath);File file2 = new File(destPath);//2.造流//2.1 造节点流FileInputStream fis = new FileInputStream(file1);FileOutputStream fos = new FileOutputStream(file2);//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);}} catch (IOException e) {e.printStackTrace();} finally {//4.关闭流资源//要求:先关闭外层的流,再关闭内层的流//说明:关闭外层的流的同时,内层流也会自动的进行关闭。关于内层流的关闭,我们可以省略try {if(bis != null)bis.close();} catch (IOException e) {e.printStackTrace();}try {if(bos != null)bos.close();} catch (IOException e) {e.printStackTrace();}}}@Testpublic void testcopyFileWithBuffered(){long start = System.currentTimeMillis();String srcPath = "C:\\Users\\Administrator\\Desktop\\IO\\视频\\\\01.mp4";String destPath = "C:\\Users\\Administrator\\Desktop\\IO\\视频\\\\03.mp4";copyFileWithBuffered(srcPath,destPath);long end = System.currentTimeMillis();System.out.println("复制操作花费的时间为:" + (end - start));//3460ms,917ms}}
字符缓冲流
package com.atguigu.java1;import org.junit.Test;import java.io.*;/*** @author Dxkstart* @create 2021-05-30 15:17*/public class BufferedTest2 {/*使用BufferedReader和BufferedWriter实现文本文件的复制*/@Testpublic void testBufferesReaderBufferedWriter(){BufferedReader br = null;BufferedWriter bw = null;try {//1\2.1\2.2步br = new BufferedReader(new FileReader(new File("C:\\Users\\Administrator\\Desktop\\IO\\hi.txt")));bw = new BufferedWriter(new FileWriter(new File("C:\\Users\\Administrator\\Desktop\\IO\\hi2.txt")));//读写操作//方式一:// char[] buffer = new char[1024];// int len;// while((len = br.read(buffer)) != -1){// bw.write(buffer,0,len);// // bw.flush();// }//方式二:String data;while((data = br.readLine()) != null){//方法一:bw.write(data + "\n");//data中不包含换行符// //方法二:// bw.write(data);//data中不包含换行符// bw.newLine();//提供换行操作}} catch (IOException e) {e.printStackTrace();} finally {//关闭资源try {if(br != null) {br.close();}} catch (IOException e) {e.printStackTrace();}try {if(bw != null) {bw.close();}} catch (IOException e) {e.printStackTrace();}}}}
