Reader Writer BufferReader BufferWriter 装饰模式

 

 

按流向分类

输入、输出流

按操作数据分

字节流、字符流

 

字节流基类

InputStream OutPutStream

字符流基类

Reader Writer

 

所有的子类后辍名都为基类,前辍为功能

 

字符流和字节流区别

字符流主要用于对文字的操作,字节流主要对文件,多媒体等二进字数据的操作

 

 

字符流

写入流Writer

Writer writer = new FileWriter("D:\\aa.txt"); 如果文件不存在则创建一个文件

writer.writer("这是输入的数据"); 将字符放入到输出流中

writer.flush(); 将放入缓存的数据刷到目录盘符中

writer.close();关闭输出流,并将缓存的数据刷到目录盘符中;

 

 

IO异常的处理方式

throws抛出异常

try(){}cath(){}捕获异常   在finaly中加入流

 

 读取流Reader

Reader reade = new Reader("D:\\aa.txt");如果文件不存在的话会报错

char[] c  = new char[1024];

int len= reade.read(c);

while(len!=-1){

System.out.println(new String(c));

}

 

 

 

 BufferedWriter

方法对象为Writer提供了一个缓冲区,写入文件的频率降低,将写入信息保存到一个缓存里面,通过flash()直接刷入文件中,提高了效率

Writer writer = new Writer("D:aa.txt");

BufferedWriter bw = new BufferedWriter(writer);

bw.writer("aaaaa");

bw.newLine();增加一个换行符 可跨平台使用

bw.flash();

bw.close(); 因为该缓冲区是为writer对象准备的,所以关闭bw就等于关闭了writer

 

 

 

 BufferReader

对象为Reader提供了一个缓冲区,将文件读到一个缓冲区里面,

在缓冲区里可以通过读取一行(不加缓冲区只可以读取一个字符,频繁读取操作速度慢),实现文件较快的读取操作

 

Reader rd = new Reader("D:aa.txt");

 BufferReader  br = new BufferReader(rd);

String info=br.readLine(); 

读取一行的信息,返回值为字符串,如果读取完了,则返回值为null...还有此返回信息只包含有效信息,不包括空格等字符;

原理:本方法实现原理也还是通过read()方法一个字符一个字符读取,并存到缓存中,遇到\r\n换行符的时候,将数据整合成一行从缓存里面刷出来

while((info=br.read())!=-1){

System.out.print(info);

}

 

 

 

装饰模式

主要用于对原方法的功能增强

在构造的时候需要传入原方法的对象,以方便对原方法进行增强

一般都有相同的父类对象或继承自同一个接口,对相应的功能进行扩展

 

和继承和区别

装饰模式只需要传入一个对象即可,多级装饰的时候不会代码臃肿,代码间关系降到很低,如果当前的扩展不能用,可以只用原来的功能

继承如果多级继承的话,代码会臃肿,不容易阅读,如果父类对象出现变动,子类对象也需要全部进行更改,耦合度过高

 

LineNumReader

此对象和BufferReader缓存对象混合使用,使用装饰模式,将文件按行读出来,并加上行号

public class Dome4 extends Reader {
 private BufferedReader bf;

 Dome4(BufferedReader bf) {
  this.bf = bf;
 }

 @Override
 public int read() throws IOException {

  LineNumberReader lnr = new LineNumberReader(bf);
  System.out.println(lnr.getLineNumber()+"  "+lnr.readLine());

  return super.read();
 }

 @Override
 public void close() throws IOException {

 }

 @Override
 public int read(char[] cbuf, int off, int len) throws IOException {
  return 0;
 }

 public static class Test {

  public static void main(String[] args) {
   try {
    FileReader reader = new FileReader("D:\\aaaaaaaaa.txt");

    BufferedReader br = new BufferedReader(reader);
    Dome4 d4 = new Dome4(br);
    d4.read();
   } catch (FileNotFoundException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   }

  }

 }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值