java020字符过滤流和装饰器设计模式

一,字符过滤流:学习这个流,主要学习它里面的一个api
1,BufferdReader:
按单位分:是字符流
按方向分:是输出流
按功能分:是过滤流(包装流,就是流包装后的流)
java在Windows里面的换行是"\r\n"
java在Linux里面的换行是"\n"
java是跨平台的,但是换了操作系统后,换行不一样了,所以字符过滤流中的一个api可以解决换行问题
1,写的时候#######

在这里插入图片描述

2,读的时候#######

在这里插入图片描述

注意:字符流不能复制图片,原因是字符流牵扯解码和编码,而图片中会出现一些负数,这些负数在编码表中没有对应的字符就出现了?, 而程序在复制期间就会把这些问号给丢弃掉,所以你发现复制过去的文件大小少了一些字符
二,
设计模式:装饰器设计模式
装饰器设计模式就是基于已有的对象,进行功能增强时,将已有对象以构造器的形式传入,已有对象叫被装饰类,自己定义的类叫装饰器类
例如:装饰器自定义一个BufferedReader

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
class MyBufferedReader{
 private Reader in;  //关联,把一个类当做另一个类的属性
 public MyBufferedReader(Reader in){
  this.in=in; //构造器给初始值
 }
 public String readLine() throws IOException{
  StringBuilder sb=new StringBuilder("");
  int n;
  char c;
  while(true){
  n=in.read();
   c=(char)n;
   if(c=='\r'){  //\n\r合起来就是换行的意思
    //\r表示光标重新回到本行的开头
    continue;
   }
   if(c=='\n'||n==-1){//\n表示光标往下一行
    break;
   }
   sb.append(c);
  }
  if(sb.length()>0){
   return sb.toString();
  }else{
   if(c=='\n'){
    return sb.toString();
   }else{//光标不往下走了就说明读完了
    return null;
       }
  }
 }
}
public class Test1 {
 public static void main(String[] args) throws IOException {
  Reader in=new FileReader("d:/2.txt");
  MyBufferedReader mbr=new MyBufferedReader(in);
  String line;
  while((line=mbr.readLine())!=null){
   System.out.println(line);
  }

猜你喜欢

转载自blog.csdn.net/weixin_44699728/article/details/89519731