IO流,缓冲区,装饰设计模式




缓冲区原理:
         临时存储数据的方法。减少对设备操作的频率,提高了效率。其实就是
           对数据临时缓存到了内存(数组)中。

reade()方法原理:
 public int myRead() throws IOException{
      if(cout==0){
        count = r.read(buffer);
           index=0;
  }
   if(count<0){
          return -1;}
    char ch = buffer[index];
    index++;
    count--;
    return ch;

 }

readLine(): 调用了read ();从缓冲区中获取数据存储到readLine自己的缓冲区,

            它会判断终止符,只存储行结束符前的数据。
 
if(ch=='\r')
 continnue;
if(ch=='\n')
  return sb.toString();

readLine()方法原理:
 public String myReadLine() throws IOException{
  StringBuilder sb = new StringBuilder();
   int ch =0 ;
  while((ch=myRead())!=-1){
     if(ch=='\r')
         continnue;
    if(ch=='\n')
        return sb.toString();
 
     sb.append((char)ch);
    }
   if(sb.length()!=0)
          return sb.toString();
   return null;

 }
 
****装饰设计模式(wrapper, Decorator): (BufferedReader,BufferedWriter)
    可以给对象提供额外的功能,比继承方式更灵活。
   装饰类与被装饰类都所属于同一个体系。
   同时装饰类中持有装饰类的引用。

 BufferedReader bufr= new BufferedReader (new InputStream(System.in));

****** Properties
    特点:
        1,Hashtable的子类,map集合中的方法都可以使用。
        2,该集合没有泛型,键值都是字符串。
        3,它是一个可以持久化的属性集。键值可以存储到集合中,也可以存储到持久化的设备上
            键值的来源也可以是持久化的设备。

 Properties prop =new Properties();

 prop.list(System.out); // 列出给集合的所有对象,主要用于测试


***IO流的规律总结:  解决的问题,就是开发中具体要使用哪个流对象的问题。
  
1, 明确数据源,数据汇(数据目的)
    其实就是在明确要使用的IO体系。InputStream OutoutStram Reader, Writer

    需求中操作的是源: 意味着是读 。 InputStream Reader
 
    需求中操作的是目的: 意味着写。 OutputStream . Writer

2,操作的数据是否是纯文本数据?
   是,字符流
   否,字节流
 
  是并且是源,Reader
  是并且是目的,Writer

通过前两个明确,明确了具体要使用的体系。

明确体系中要使用哪个对象:
 源设备:
     硬盘,能操作File 的流对象都是,File开头
     键盘,System.in;
      内存: 数组
     网络: socker流
 
目的设备:
    硬盘,能操作File 的流对象都是,File开头
     键盘,System.out
      内存: 数组
      网络: socker流

到第三步明确就可以找到具体的流对象了。

4, 需要额外功能吗?
   需要高效吗? 缓冲区,Buffered开头
   需要编码转换吗? 转换流。


发布了56 篇原创文章 · 获赞 14 · 访问量 2万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章