处理流之 1:缓冲流的使用

  • 基础I0流的框架
    • 抽象基类:
      • Reader (读)
      • Writer(写)
      • InputStream
      • OutputStream
    • 4个节点流(也称为文件流)
      • FileReader
      • FileWriter(字符)
      • FileInputStream
      • File0utputStream(字节)
    • 4个缓冲流(处理流的一种)
      • BufferedReader
      • BufferedWriter
      • BufferedInputStream
      • Buffered0utputStream
  • 缓冲流的作用:提升文件读写的效率。
  • 4个缓冲流
    • 使用的方法
      • 处理非文本文件的字节流:
        • BufferedInputStream read(byte[] b)
        • Buffered0utputStream write(byte[] b,0,len)
        • 构造器:
          • public BufferedInputStream(InputStream in) :创建一个 新的字节型的缓冲输入流。
          • public BufferedOutputStream(OutputStream out): 创建一个新的字节型的缓冲输出流。
      • 处理文本文件的字符流:
        • BufferedReader I d(char[] c)/ readLine()
        • BufferedWriter write(char[] c,0,len)
        • 字符缓冲流特有方法
          • BufferedReader:public String readLine(): 读一行文字。
          • BufferedWriter:public void newLine(): 写一行行分隔符,由系统属性定义符号。
          • 代码补充:
                    /*
            		 * 为表达清楚,本代码使用throws抛出异常
            		 */
            		File f1=new File("D:\\io\\io1\\Test1.txt");
            		File f2=new File("D:\\io\\io1\\Test2.txt");
            		FileReader r = null;
            		FileWriter w=null;
            		r=new FileReader(f1);
            		w=new FileWriter(f2);
            		BufferedReader bRead=null;
            		BufferedWriter bWrite=null;
            		bRead = new BufferedReader(r);
            		bWrite = new BufferedWriter(w);
            		String str;
            		while((str=bRead.readLine())!=null) {//此方法写完返回null,不写换行
            			bWrite.write(str);
            			bWrite.newLine();//键入换行
            			bWrite.flush();
            		}
            		System.out.println("复制成功");
            		bRead.close();
            		bWrite.close();//只需关闭外部资源,内部资源便会自动关闭

  • 步骤
    • 1.创建File的对象、流的象(包括文件流、缓冲流)
    • 2.使用缓冲流实现 读取数据 或 写出数据的过程
      • 读取:int read(char[] c/byte[] b):每次将数据读入到c/b数组中,并返回读入到数组中
      • 写出:void write(String str)/write(char[] c):将str或c写出到文件中void write(byte[] b)将byte[]写出到文件中
    • 3.关闭资源
      • 涉及到嵌套的多个流时,如果都显式关闭的话,需要先关闭外层的流,再关闭内层的流。
      • 实际开发中,只需要关闭最外层的流即可,因为在关闭外层流(缓冲流)时,内层的流(字节流,字符流)也会被关闭。
    • 代码补充:
      public static void BufferedTest (String str1,String str2){
      	// TODO Auto-generated method stub
      	FileInputStream r=null;
      	FileOutputStream w=null;
      	BufferedInputStream bRead=null;
      	BufferedOutputStream bWrite=null;
      	File f1 = new File(str1);
      	File f2 = new File(str2);
      	try {
      		r = new FileInputStream(f1);
      		w = new FileOutputStream(f2);
      		bRead = new BufferedInputStream(r);
      		bWrite = new BufferedOutputStream(w);//创建File的对象、流的象(包括文件流、缓冲流)
      		byte[] b = new byte[1024];
      		int len;
      		while ((len = bRead.read(b)) != -1) {
      			bWrite.write(b, 0, len);
      		} //使用缓冲流实现 读取数据 或 写出数据的过程
      		System.out.println("复制成功");
      	} catch (Exception e) {
      		// TODO: handle exception
      		e.printStackTrace();
      	}finally {//关闭资源
      		try {
      			if(bWrite!=null) {
      				bWrite.close();
      			}
      			if(bRead!=null) {
      				bRead.close();//先关外部再关内部
      			}//但此种情况关BufferedInputStream,BufferedOutputStream即可
      		} catch (Exception e) {
      			// TODO: handle exception
      			e.printStackTrace();
      		}
      	}
      }

  • 补充:
    • 因为内置缓冲区的原因,如果FileWriter不关闭输出流,就无法写出字符到文件中。但是关闭的流对象,是无法继续写出数据的。如果我们既想写出数据,又想继续使用流,就需要flush() 方法了。
    • flush():刷新缓冲区,流对象可以继续使用。
    • close():先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。
    • 注意:即便使用flush()方法写出了数据,操作的最后还是要调用close方法,释放系统资源。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值