关于缓冲流的使用
2015-10-10 10:56
274 查看
前言:
为了提高数据读写的速度,Java API提供了带缓冲功能的流类,在使用这些流类时,会创建一个内部缓冲区数组
根据数据操作单位可以把缓冲流分为:
BufferedInputStream 和 BufferedOutputStream
BufferedReader 和 BufferedWriter
缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法
对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush()将会使内存中的数据立刻写出
缓冲流的代码示例如下:
为了提高数据读写的速度,Java API提供了带缓冲功能的流类,在使用这些流类时,会创建一个内部缓冲区数组
根据数据操作单位可以把缓冲流分为:
BufferedInputStream 和 BufferedOutputStream
BufferedReader 和 BufferedWriter
缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法
对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush()将会使内存中的数据立刻写出
缓冲流的代码示例如下:
package com.atguigu.java; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import org.junit.Test; /* * 抽象基类 节点流(文件流) 缓冲流(处理流的一种,可以提升文件操作的效率) * InputStream FileInputStream BufferedInputStream * OutputStream FileOutputStream BufferedOutputStream (flush()) * Reader FileReader BufferedReader (readLine()) * Writer FileWriter BufferedWriter (flush()) */ public class TestBuffered { @Test public void testBufferedReader(){ BufferedReader br = null; BufferedWriter bw = null; try { File file = new File("dbcp.txt"); File file1 = new File("dbcp3.txt"); FileReader fr = new FileReader(file); FileWriter fw = new FileWriter(file1); br = new BufferedReader(fr); bw = new BufferedWriter(fw); // char[] c = new char[1024]; // int len; // while((len = br.read(c))!= -1){ // String str = new String(c, 0, len); // System.out.print(str); // } String str; while((str = br.readLine()) != null){ // System.out.println(str); bw.write(str + "\n"); // 用readLine()时,那么写的时候,不会自动换行,所以在写时,需要手动换行 // bw.newLine(); bw.flush(); } }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(bw != null){ try { bw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(br != null){ try { br.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } @Test public void testCopyFile(){ long start = System.currentTimeMillis(); // String src = "C:\\Users\\shkstart\\Desktop\\1.avi"; // String dest = "C:\\Users\\shkstart\\Desktop\\3.avi"; String src = "C:\\Users\\shkstart\\Desktop\\实验.doc"; String dest = "C:\\Users\\shkstart\\Desktop\\实验1.doc"; copyFile(src,dest); long end = System.currentTimeMillis(); System.out.println("花费的时间为:" + (end - start));//746 } //使用缓冲流实现文件的复制的方法 public void copyFile(String src,String dest){ BufferedInputStream bis = null; BufferedOutputStream bos = null; try { //1.提供读入、写出的文件 File file1 = new File(src); File file2 = new File(dest); //2.想创建相应的节点流:FileInputStream、FileOutputStream FileInputStream fis = new FileInputStream(file1); FileOutputStream fos = new FileOutputStream(file2); //3.将创建的节点流的对象作为形参传递给缓冲流的构造器中 bis = new BufferedInputStream(fis); bos = new BufferedOutputStream(fos); //4.具体的实现文件复制的操作 byte[] b = new byte[1024]; int len; while((len = bis.read(b)) != -1){ bos.write(b, 0, len); bos.flush(); //记得用flush()刷新 } }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ //5.关闭相应的流 if(bos != null){ try { bos.close(); //关闭过滤流时,会自动关闭它所包装的底层节点流,所以在本例中就无需再关闭fos } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(bis != null){ try { bis.close(); //关闭过滤流时,会自动关闭它所包装的底层节点流,所以在本例中就无需再关闭fis } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } //使用BufferedInputStream和BufferedOutputStream实现非文本文件的复制 @Test public void testBufferedInputOutputStream(){ BufferedInputStream bis = null; BufferedOutputStream bos = null; try { //1.提供读入、写出的文件 File file1 = new File("1.jpg"); File file2 = new File("2.jpg"); //2.想创建相应的节点流:FileInputStream、FileOutputStream FileInputStream fis = new FileInputStream(file1); FileOutputStream fos = new FileOutputStream(file2); //3.将创建的节点流的对象作为形参传递给缓冲流的构造器中 bis = new BufferedInputStream(fis); bos = new BufferedOutputStream(fos); //4.具体的实现文件复制的操作 byte[] b = new byte[1024]; int len; while((len = bis.read(b)) != -1){ bos.write(b, 0, len); bos.flush(); } }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ //5.关闭相应的流 if(bos != null){ try { bos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(bis != null){ try { bis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }
相关文章推荐
- 关于文件流的使用
- File类的常用方法
- 自定义枚举类及使用enum的枚举类
- 关于泛型的使用
- Collections工具类的使用
- 关于Map接口的方法的使用及其Map下的子类的使用
- 移除VS2005方案中的Visual SourceSafe绑定信息
- Set接口常见的使用方法
- ArrayList常见的使用方法
- 比较ArrayList、LinkedList、Vector
- java集合的体系
- Java的JUnit
- Collection接口常用的方法
- Java的包装类,基本数据类型和String类之间的转化
- 多线程中的Double Close与System Call Hook
- Mikrotik RouterOS-脚本-花生壳动态域名解析
- LAMP搭建
- C++primer第五版笔记-第十章泛型算法
- 华为2016校招机试题(2015年9月) 海大下午场(包含实现代码,运行环境为VS2010)
- js客户端UI框架