------------Android培训
、Java培训、期待与您交流----------
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);
* }
*/
}
------------Android培训
、Java培训、期待与您交流----------