缓冲流
2020-08-08 16:46
639 查看
缓冲流
缓冲流的使用
缓冲流是处理流的一种
处理流就是“套接”在已有的流的基础上
分类
字节:
- BufferedInputStream
- BufferedOutputStream
字符:
- BufferedReader
- BufferedWriter
作用
缓冲流的主要作用是提高文件的读写效率
BufferedInputStream和BufferedOutputStream的使用
字节型
过程
-
实例化File类的对象,指明要操作的文件
-
提供具体的流
2.1 造节点流
2.2 造缓冲流
-
数据的写出输入过程
-
流的关闭操作
-
关闭顺序的要求:先关闭外层的流,再关闭内层的流
-
try-catch-finally异常处理
说明
- 在提供具体的流的时候,先造内层的FileInputStream(FileOutputStream)流,再造外层BufferedInputStream(BufferedOutputStream)流
- 在关闭外层流的同时,内层流也会自动的进行关闭。关于内层流的关闭可以省略
代码实现
FileInputStream fis = null; FileOutputStream fos = null; BufferedInputStream bis = null; BufferedOutputStream bos = null; try { //1. 实例化File类的对象,指明要操作的文件 File srcFile = new File("C:\\Users\\LENOVO\\Desktop\\丸子.png"); File destFile = new File("C:\\Users\\LENOVO\\Desktop\\殷志源.png"); //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[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(); } //关闭内层流省略 // try { // if(fos != null) // fos.close(); // } catch (IOException e) { // e.printStackTrace(); // } // // try { // if(fis != null) // fis.close(); // } catch (IOException e) { // e.printStackTrace(); // } }
运行结果
缓冲流与节点流读写速度对比
两次代码的byte[]数组设定的长度相同,都是byte[1024],复制的都是同一个视频
利用节点流花费的时间为339(在节点流章节2.2中可以查看)
https://www.cnblogs.com/CrabDumplings/p/13453353.html
利用缓冲流花费的时间为77
缓冲流提高读写速度的原因
其内部提供了一个缓冲区
文件在读取的时候先将文件读取到缓冲区,达到缓冲区指定大小后一次性的写出
BufferedOutputStream中有一个方法
bos.flush; //刷新缓冲区(会自动刷新,不用显式调用)
超出缓冲区指定的大小的时候,会自动的刷新出去(把缓冲区的数据情况,将数据写出去)
BufferedReader和BufferedWriter的使用
和BufferedInputStream和BufferedOutputStream用法相似
-
BufferedInputStream和BufferedOutputStream“包”的是FileInputStream和FileOutputStream
-
BufferedReader和BufferedWriter“包”的是FileReader和FileWriter
具体原因见下图( https://www.cnblogs.com/CrabDumplings/p/13441782.html )
说明
读操作的步骤中的两种写法
- 和BufferedInputStream一样
char[] cbuf = new char[1024]; int len; while((len = bfr.read(cbuf)) != -1){ bfw.write(cbuf,0,len); }
- 利用BufferedReader中的readLine()方法和String
String data; while((data = bfr.readLine()) != null){ bfw.write(data + "\n"); }
readLine():一行一行读取数据,但是读取的data中不包含换行符,如果只是如下这样写,最后复制的结果所有文字都在一行bfw.write(data );
加上换行符(如上面列举的例子) - 添加换行的方法二:newLine()方法(BufferedWriter中的方法)
bfw.write(data); bfw.newLine();
代码实现
文本文件的复制
public void copytxt(String srcPath, String destPath){ BufferedReader bfr = null; BufferedWriter bfw = null; try { File srcFile = new File(srcPath); File destFile = new File(destPath); bfr = new BufferedReader(new FileReader(srcFile)); bfw = new BufferedWriter(new FileWriter(destFile)); //方式一 // char[] cbuf = new char[1024]; // int len; // while((len = bfr.read(cbuf)) != -1){ // bfw.write(cbuf,0,len); // } //方式二 String data; while((data = bfr.readLine()) != null){ //2.1 // bfw.write(data + "\n");//data中不包含换行符 //2.2 bfw.write(data); bfw.newLine();} System.out.println("复制成功"); } catch (IOException e) { e.printStackTrace(); } finally { try { if(bfr != null) bfr.close(); } catch (IOException e) { e.printStackTrace(); } try { if(bfw != null) bfw.close(); } catch (IOException e) { e.printStackTrace(); } } } @Test public void test6(){ String srcPath = "C:\\Users\\LENOVO\\Desktop\\hello.txt"; String destPath = "C:\\Users\\LENOVO\\Desktop\\hello(1).txt"; long start = System.currentTimeMillis(); copytxt(srcPath,destPath); long end = System.currentTimeMillis(); System.out.println("花费的时间:" + (end - start)); }
相关文章推荐
- 心得---字符流、缓冲流、装饰模式
- java笔记八:IO流之字符流与字符缓冲流
- Java I/O流操作(二)---缓冲流[转]
- 【Java】缓冲流如何提高性能
- JAVA基础学习(二十)--IO流二-缓冲流、字节流
- [IO]——缓冲流
- java i/o流-----缓冲流
- Java IO之打印流,缓冲流,Scanner的用法
- IO之缓冲流
- 缓冲流的用法
- Java I/O流复习(一)—File类、字节流、字节缓冲流
- java基础 字符缓冲流[BufferedReader 和 BufferedWriter]
- Java之缓冲流、Properties集合以及序列化与反序列化详解
- Java--缓冲流
- IO(转换流、缓冲流)
- 缓冲流
- 缓冲流、转换流、序列化流、打印流
- Java中的缓冲流、转换流、序列化流、打印流介绍
- 字符输出流,缓冲流
- java 的IO流--文件流---缓冲流---转换流--打印流---数据流---数组流---对象流--序列化