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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章