黑马程序员---Java基础学习笔记IO-2

-------  android培训 java培训 、期待与您交流! ---------- 

1.流数据缓冲区

  缓冲区的出现提高了对数据的读写效率
  对应类:BufferedWriter BufferedReader
  缓冲区要结合流才可以使用。在流的基础上对流的功能进行了增强。
  所以在建立缓冲区之前,必须要先有流对象
[java]  view plain copy print ?
  1. import java.io.*;  
  2.   
  3. public class BufferZone   
  4. {  
  5.     public static void main(String[] args) throws IOException   
  6.     {  
  7.         /* 
  8.         FileWriter fw = new FileWriter("iojavao2.txt" , true); 
  9.         BufferedWriter bufw = new BufferedWriter(fw); 
  10.         for(int i = 0 ; i < 5 ; i++) 
  11.         { 
  12.             bufw.write("abcdefg"); 
  13.             bufw.newLine();//可以跨平台相当于bufw.write("\r\n"); 
  14.             bufw.flush(); 
  15.         } 
  16.         //只要用到缓冲区,就要记得刷新。 
  17.         //bufw.flush(); 
  18.          
  19.         bufw.close();//其实关闭缓冲区就是关闭缓冲区中的流对象 
  20.         */  
  21.         /* 
  22.         FileReader fr = new FileReader("iojavao2.txt"); 
  23.         BufferedReader bufr = new BufferedReader(fr); 
  24.         String str = null; 
  25.         while((str = bufr.readLine())!=null) 
  26.         //String s1 = bufr.readLine(); 
  27.         { 
  28.             System.out.println(str); 
  29.         } 
  30.         bufr.close(); 
  31.         */  
  32.         /* 
  33.         //复制文件 
  34.         BufferedReader bufr = null; 
  35.         BufferedWriter bufw = null; 
  36.         try 
  37.         { 
  38.             bufr = new BufferedReader(new FileReader("IOTest.java")); 
  39.             bufw = new BufferedWriter(new FileWriter("iojava03.txt")); 
  40.             String line = null; 
  41.             while((line = bufr.readLine())!=null)//readLine()并不返回行行终止符 
  42.             { 
  43.                 bufw.write(line); 
  44.                 bufw.newLine(); 
  45.                 bufw.flush(); 
  46.             } 
  47.         }  
  48.         catch (Exception e) 
  49.         { 
  50.             e.printStackTrace(); 
  51.         } 
  52.         finally 
  53.         { 
  54.             try { 
  55.                 bufr.close(); 
  56.             } catch (IOException e) { 
  57.                 // TODO: handle exception 
  58.             } 
  59.             try { 
  60.                 bufw.close(); 
  61.             } catch (IOException e) { 
  62.                 // TODO: handle exception 
  63.             } 
  64.         } 
  65.         */  
  66.           
  67.         //LineNumberReader装饰类  
  68.         FileReader fr = new FileReader("IOTest.java");  
  69.         LineNumberReader lm = new LineNumberReader(fr);  
  70.         String str = null;  
  71.         //lm.setLineNumber(100);  
  72.         while((str = lm.readLine())!=null)  
  73.         {  
  74.             System.out.println(lm.getLineNumber()+":"+str);  
  75.         }  
  76.         lm.close();  
  77.     }  
  78. }  
2.模拟实现readLine()方法

装饰设计模式:当想要对已有的对象进行功能增强时,可以将该对象定义一个类,将已有
  对象传入,基于已有对象的功能,提供加强功能的一种自定义的类
  装饰类通常会通过构造方法接受被装饰的对象,并基于被装饰的对象的功能提供更强的功能
装饰和继承的区别?
 装饰模式比继承要灵活,避免了继承体系的臃肿,从而降低了类与类之间的关系
 装饰类和被装饰类通常都属于一个体系中
[java]  view plain copy print ?
  1. import java.io.*;  
  2.   
  3. public class DIYReadLine   
  4. {  
  5.     public static void main(String[] args) throws IOException   
  6.     {  
  7.         FileReader fr = new FileReader("IOTest.java");  
  8.         DIYBufferedReader dr = new DIYBufferedReader(fr);  
  9.         String line = null;  
  10.         while((line = dr.DIYReadLine()) != null)  
  11.         {  
  12.             System.out.println(line);  
  13.         }  
  14.         dr.DIYClose();  
  15.     }  
  16. }  
  17.   
  18. class DIYBufferedReader //extends Reader  
  19. {  
  20.     private FileReader r;  
  21.     DIYBufferedReader(FileReader r)  
  22.     {  
  23.         this.r = r;  
  24.     }  
  25.     //以下为对象增强的功能 DIYReadLine() DIYClose()  
  26.     public String DIYReadLine() throws IOException  
  27.     {  
  28.         //定义一个临时容器,原BufferedReader封装的是字符数组  
  29.         StringBuilder sbr = new StringBuilder();  
  30.         int ch = 0;  
  31.         while((ch = r.read())!=-1)  
  32.         {  
  33.             if(ch == '\r')  
  34.                 continue;  
  35.             else if(ch == '\n')  
  36.                 return sbr.toString();  
  37.             else  
  38.             {  
  39.                 sbr.append((char)ch);  
  40.             }  
  41.         }  
  42.         //以防文件末尾并没有回车符从而导致最后一行数据没有被打印出来  
  43.         if(sbr.length()!=0)  
  44.             return sbr.toString();  
  45.         return null;  
  46.     }  
  47.     public void DIYClose() throws IOException  
  48.     {  
  49.         r.close();  
  50.     }  
  51.       
  52.     /* 
  53.      * 如果让该类变为继承Reader类的话,因为Reader类中有抽象方法,所以要进行覆写方法 
  54.      * 否则会编译失败,这就是用继承的不方便 
  55.      * public void close() 
  56.      * { 
  57.      *      r.close(); 
  58.      * } 
  59.      * public void read(char[] cbuf , int off , int len) 
  60.      * { 
  61.      *      return r.read(cbuf , off , len); 
  62.      * } 
  63.      */  
  64.       
  65. }  
-------  android培训 java培训 、期待与您交流! ---------- 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值