1. 程式人生 > 其它 >設計模式之策略模式的實現

設計模式之策略模式的實現

I/O流

參考部落格:java IO流詳解 - 時光孤島 - 部落格園 (cnblogs.com)

概念:記憶體與儲存裝置之間傳輸資料的通道

分類:按單位:

位元組流:以位元組為單位,可以讀寫所有資料

字元流:以字元為單位,智慧讀寫文字資料

按功能:

節點流:具有實際傳輸資料的讀寫功能

過濾流:在節點流的基礎之上增強功能

位元組流的父類(抽象類):

InputStream是從硬碟讀取到記憶體(read)

OutputStream是從記憶體寫入到硬碟(write)

位元組流

FileInputStream:

 public int read(byte[] b)//從流中讀取多個位元組,將讀到的內容存入b陣列,返回實際讀到的位元組數;如果達到檔案的尾部,則返回-1。

FileOutputStream:

 public void write(byte[] b)//一次寫入多個位元組,將b陣列中所有位元組,寫入輸出流。

位元組緩衝流

BufferedInputStream與BufferedOutputStream

作用:提高IO效率,減少訪問磁碟的次數;

資料儲存在緩衝區中,flush是將快取區的內容寫入檔案中,也可直接close。

物件流

ObjectOutputStream/ObjectInputStream

  1. 增強了緩衝區功能

  2. 增強了讀寫8中基本資料型別和字串的功能

  3. 增強了讀寫物件的功能

使用流傳輸物件的過程稱為:序列化、反序列化

字元流

FileReader:

 public int read(char[] c)//從流中讀取多個字元,將獨到的內容存入c陣列,返回實際讀到的位元組數;如果達到檔案的尾部,則返回-1

FileWriter:

 public void write(String str)//一次寫入多個字元,將b陣列所有字元,寫入輸出流。

字元緩衝流

BufferedReader與BufferedWriter

高效讀寫,支援輸入換行符,可一次寫一行、讀一行

列印流

PrintWriter

轉換流

橋轉換流:InputStreamReader與OutputStreamWriter

可將位元組流轉換為字元流

可是之字元的編碼方法

File類

概念:代表物理盤中的一個檔案或資料夾

FileFilter介面

 public intweface FileFilter{
     boolean accept(File pathname)
 }

當呼叫File類中的listFiles()方法時,支援傳入FileFilter介面,介面實現類,對獲取檔案進行過濾,只有滿足條件的檔案的才可出現在listFiles()的返回值中

Properties

屬性集合

特點:1. 儲存屬性名和屬性值

  1. 屬性名和屬性值都是字串型別

  2. 沒有泛型

  3. 和流有關

總結

 byte[] buf = new byte[1024];
 int count1 = 0;
 while((count1=fis.read(buf))!=-1){
     System.out.println(new String(buf,0,count1));
 }
 //疑問?
 // 參考部落格:https://blog.csdn.net/zzuwlan_high/article/details/78553193
 
 /*
 * 引用API文件:“public int read(byte[] b) throws IOException:
 * 從此輸入流中將最多 b.length 個位元組的資料讀入一個 byte 陣列中。在某些輸入可用之前,此方法將阻塞。“
 * 注意“阻塞”二字,fis執行read時,不會每讀一個位元組就對count1賦值,所以while迴圈就被一直堵在判斷語句中,
 * 直到buf被賦滿出現異常,讀取的阻塞釋放,count1終於被賦了一個值1024,接下來就執行迴圈體的列印。
 * buf第一次塞滿時,檔案被讀到的地方會有一個記錄,所以當迴圈體執行完後,fis從上次迴圈結束的記錄
 * 向下讀檔案,又把while迴圈阻塞在判斷語句,直到讀完最後一個位元組,讀取阻塞再次被釋放,這次count1被賦值,
 * 該值為這次fis讀到的位元組數。然後,執行迴圈體列印。然後,fis再次嘗試讀取檔案,這時候已經沒有位元組可讀,
 * 故返回-1賦給count1,迴圈體不再執行,迴圈結束。
 * */