關於反射的一些個人理解
阿新 • • 發佈:2020-08-19
javaIO 通過java一系列檔案操作的API對檔案的資訊進行讀取(input)或寫入(output)的操作。
javaIO流 java中操作檔案的類,大多命名為Stream流。如輸入流見inputStream輸出流叫outputStream。
java中所有的檔案組成的基本單元都是byte位元組。
常見的IO流分類
1、按流向:
輸入流:將內容讀取到java記憶體中。
輸出流:將java記憶體的資料寫入到對應目標位置(磁碟、網路...)。
2、按操作單元:
位元組流:以位元組為單位進行讀取,位元組流可以操作任意檔案。字元流:以字元為單位進行操作,只能讀取文字檔案。如果讀取的是文字檔案則使用此流
3、按照功能角色來分
節點流:為實際做IO操作的流
處理流:為節點流的包裝,需要傳入一個節點流,在節點流的基礎之上,增加一些特有的功能。
4、按功能分
檔案操作流
緩衝流
序列化流
列印輸出流
常見IO流
1、位元組流
位元組流命名都是以Stream結尾,根據流向又分
inputStream 位元組輸入流(讀)inputStream為所有位元組輸入流的父類是一個抽象類實現了Closeable介面,意為可關閉的,其定義了子類中一些通用的方法。
read()讀取一個位元組以int型別返回
read(byte[])讀取一個位元組陣列 返回讀取到的位元組數如果讀取到檔案的末尾,則返回-1。
read(byte[],int offset,int Len)讀取一個int陣列並將其存入指定的下標位置。讀取的長度len,如果讀取到末尾則返回-1
close()關閉流,釋放資源。常見的子類
FileInputStream 讀取檔案的位元組輸入流。
BufferedInputStream 緩衝位元組輸入流,是一個處理流。需要傳入一個節點流。在節點流的基礎之上增加了一個緩衝區間
會先將資料讀取至緩衝區。而獲取資料時從緩衝區獲取。緩衝區預設大小為8192。
ObjectInputStream:物件的輸入流,可以將讀取到的內容轉換為java物件 處理流,即實現物件的反序列化。
outputStream 位元組輸出流(寫)
outputStream為所有位元組輸出流的父類,為一個抽象類,其定義了常見的位元組輸出流通用的API方法,
write(int) 寫一個位元組
write(byte[] b) 寫一個位元組陣列
write(byte[] b,int off,int len) 寫一個位元組陣列的一部分,從off開始len長度的位元組
flush() 將緩衝區的內容輸出(寫入目標物件)
close() 關閉流,釋放資源。
常見子類
FileOutputStream:檔案位元組輸出流。將java記憶體中的內容寫入檔案中。是一個節點流
BufferedOutputStream 緩衝位元組輸出流,是一個處理流。需要傳入一個節點流。在節點流的基礎之上增加了一個緩衝區間,
會先將資料寫入至緩衝區。當緩衝區寫滿時,會將緩衝區的內容一次寫入檔案中。緩衝區預設大小為8192。
ObjectOutputStream物件輸出流是一個處理流用來將Java物件寫入目標位置(磁碟,網路傳輸)
使用ObjectOutputStream寫入物件的過程稱之為系列化
2、字元流
以字元為單位的流,只能操作文字檔案,底層還是通過位元組流來實現。
按流向來分字元輸入流(Reader)和字元輸出流(Writer)
字元輸入流Reader
字元輸入流為所有字元輸入流的父類,是一個抽象類,定義了字元輸入流的通用方法
1、Read()讀一個字元
2、Read(char[])讀一個字元陣列
3、Read(char[] ,int off,int len)讀取len字元,存入陣列的off位置
4、close()關閉流資源
常見字元流
1、InputStreamReader字元轉換流,可以將位元組流轉換為字元流。
2、OutputStreamReader字元轉換流,可以將位元組流轉換為字元流。
FileReader 不能指定字元編碼格式
FileWriter 不能制定字元編碼格式
BufferedReader
序列化與反序列化
序列化就是將java物件轉換成位元組序列的過程,通過ObjectOutputStream來實現
序列化時序列化物件所在類的屬性也必須繼承序列化介面
transient static修飾的屬性不會被序列化優先使用transient
反序列化就是將位元組序列轉換成java物件的過程,通過ObjectInputStream來實現
序列化與反序列化要求對應的類實現序列化介面Serializable
反序列化是一種深拷貝