1.流数据缓冲区
缓冲区的出现提高了对数据的读写效率
对应类:BufferedWriter BufferedReader
缓冲区要结合流才可以使用。在流的基础上对流的功能进行了增强。
所以在建立缓冲区之前,必须要先有流对象
对应类:BufferedWriter BufferedReader
缓冲区要结合流才可以使用。在流的基础上对流的功能进行了增强。
所以在建立缓冲区之前,必须要先有流对象
- import java.io.*;
- public class BufferZone
- {
- public static void main(String[] args) throws IOException
- {
- /*
- FileWriter fw = new FileWriter("iojavao2.txt" , true);
- BufferedWriter bufw = new BufferedWriter(fw);
- for(int i = 0 ; i < 5 ; i++)
- {
- bufw.write("abcdefg");
- bufw.newLine();//可以跨平台相当于bufw.write("\r\n");
- bufw.flush();
- }
- //只要用到缓冲区,就要记得刷新。
- //bufw.flush();
- bufw.close();//其实关闭缓冲区就是关闭缓冲区中的流对象
- */
- /*
- FileReader fr = new FileReader("iojavao2.txt");
- BufferedReader bufr = new BufferedReader(fr);
- String str = null;
- while((str = bufr.readLine())!=null)
- //String s1 = bufr.readLine();
- {
- System.out.println(str);
- }
- bufr.close();
- */
- /*
- //复制文件
- BufferedReader bufr = null;
- BufferedWriter bufw = null;
- try
- {
- bufr = new BufferedReader(new FileReader("IOTest.java"));
- bufw = new BufferedWriter(new FileWriter("iojava03.txt"));
- String line = null;
- while((line = bufr.readLine())!=null)//readLine()并不返回行行终止符
- {
- bufw.write(line);
- bufw.newLine();
- bufw.flush();
- }
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- finally
- {
- try {
- bufr.close();
- } catch (IOException e) {
- // TODO: handle exception
- }
- try {
- bufw.close();
- } catch (IOException e) {
- // TODO: handle exception
- }
- }
- */
- //LineNumberReader装饰类
- FileReader fr = new FileReader("IOTest.java");
- LineNumberReader lm = new LineNumberReader(fr);
- String str = null;
- //lm.setLineNumber(100);
- while((str = lm.readLine())!=null)
- {
- System.out.println(lm.getLineNumber()+":"+str);
- }
- lm.close();
- }
- }
2.模拟实现readLine()方法
装饰设计模式:当想要对已有的对象进行功能增强时,可以将该对象定义一个类,将已有
对象传入,基于已有对象的功能,提供加强功能的一种自定义的类
装饰类通常会通过构造方法接受被装饰的对象,并基于被装饰的对象的功能提供更强的功能
装饰和继承的区别?
装饰模式比继承要灵活,避免了继承体系的臃肿,从而降低了类与类之间的关系
装饰类和被装饰类通常都属于一个体系中
对象传入,基于已有对象的功能,提供加强功能的一种自定义的类
装饰类通常会通过构造方法接受被装饰的对象,并基于被装饰的对象的功能提供更强的功能
装饰和继承的区别?
装饰模式比继承要灵活,避免了继承体系的臃肿,从而降低了类与类之间的关系
装饰类和被装饰类通常都属于一个体系中
- import java.io.*;
- public class DIYReadLine
- {
- public static void main(String[] args) throws IOException
- {
- FileReader fr = new FileReader("IOTest.java");
- DIYBufferedReader dr = new DIYBufferedReader(fr);
- String line = null;
- while((line = dr.DIYReadLine()) != null)
- {
- System.out.println(line);
- }
- dr.DIYClose();
- }
- }
- class DIYBufferedReader //extends Reader
- {
- private FileReader r;
- DIYBufferedReader(FileReader r)
- {
- this.r = r;
- }
- //以下为对象增强的功能 DIYReadLine() DIYClose()
- public String DIYReadLine() throws IOException
- {
- //定义一个临时容器,原BufferedReader封装的是字符数组
- StringBuilder sbr = new StringBuilder();
- int ch = 0;
- while((ch = r.read())!=-1)
- {
- if(ch == '\r')
- continue;
- else if(ch == '\n')
- return sbr.toString();
- else
- {
- sbr.append((char)ch);
- }
- }
- //以防文件末尾并没有回车符从而导致最后一行数据没有被打印出来
- if(sbr.length()!=0)
- return sbr.toString();
- return null;
- }
- public void DIYClose() throws IOException
- {
- r.close();
- }
- /*
- * 如果让该类变为继承Reader类的话,因为Reader类中有抽象方法,所以要进行覆写方法
- * 否则会编译失败,这就是用继承的不方便
- * public void close()
- * {
- * r.close();
- * }
- * public void read(char[] cbuf , int off , int len)
- * {
- * return r.read(cbuf , off , len);
- * }
- */
- }