設計模式之策略模式的實現
阿新 • • 發佈:2022-03-31
參考部落格:
概念:記憶體與儲存裝置之間傳輸資料的通道
分類:按單位:
位元組流:以位元組為單位,可以讀寫所有資料
按功能:
節點流:具有實際傳輸資料的讀寫功能
過濾流:在節點流的基礎之上增強功能
位元組流的父類(抽象類):
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
-
增強了緩衝區功能
-
增強了讀寫8中基本資料型別和字串的功能
-
增強了讀寫物件的功能
使用流傳輸物件的過程稱為:序列化、反序列化
字元流
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. 儲存屬性名和屬性值
-
屬性名和屬性值都是字串型別
-
沒有泛型
-
和流有關
總結
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,迴圈體不再執行,迴圈結束。
* */