IO流系統總結
一.描述如下流的基本作用:
檔案位元組流、檔案字元流、緩衝位元組流、緩衝字元流位元組陣列流、資料流、轉換流、物件流
1.檔案位元組流:
FileInPutStream
FileOutPutStream
是一種節點流,直接面向資料,中間沒有其他流介入資料。檔案之間的資料通過位元組的方式操作。
基本的位元組流,對於位元組的操作是底層操作,是檔案之間資料的直接操作。
FileInPutStream用到的方法是:read()
用於讀取某個檔案,在使用的時候格式為
FileInPutStream fis = new FileInputStream(“D://test.txt”);
fis.read();
fis.read(byte[],0,length);
這樣我們就讀取到了檔案資料,但是fis.read()是一個位元組,並不是我們人類識別的字元
FileOutPutStream fos = new FileOutPutStream("D://test.txt");
fos.write();
或者
fos.write(byte[], 0 ,length);
一般在使用的時候是這樣的:
首先建立一個數組用來接收fis.read()讀取的資料
byte[] buf = new byte[1024];//任意數字
fis.read(buf);//返回一個int型別的數字,用來記錄每次讀取了多大的資料
int i = fis.read(buf);//這樣我們就完成了一次1024大小的資料獲取 , i = 1024 是我們讀取到的資料;
如果我們讀取完畢,那麼i = fis.read(buf);這個整體將會返回一個-1;(因為檔案當中的資料已經被全部拿走了所以i的賦值結果為-1)
接下來我們使用while迴圈 就可以拿到檔案中所有的資料了;
這個時候我們讀取的檔案存入buf,如果需要輸出的讓我們看到的話,可以使用new String(buf,0,i)來完成顯示讀取的檔案
如果是read()這樣的讀取的話,是一個位元組一個位元組讀取,直接賦值列印就能看到
我們來寫入的時候需要:
write();
將需要帶入的資料放在括號即可。
但是需要注意的是括號中的int型別的資料將自動轉換為char
當然也可以放入陣列,在陣列將陣列當中的資料getByte為資料放在陣列當中寫入檔案
2.檔案字元流:FileReader,FileWrite,是一種節點流。
直接可以面向檔案進行字元間的操作。
基本操作為read以及write方法
但是要注意,讀取的資訊為int,原因是底層使用的InPutStreamRead,如果需要檢視讀取的資料,那麼需要轉為char型別。
所以要使用cahr型別的陣列進行資料的快捷交換。
write需要注意的就是要close或者flush重新整理記憶體/
3.緩衝位元組流:將檔案位元組流中中轉站新增緩衝區(8192),提高資料的傳輸效率。
BufferedInputStream;
read
底層是FileInPutStream,在資料的流傳過程中添加了8192大小的byte型別陣列
BufferedOutputStream;
write
底層是FileOutPutStream
4.緩衝字元流:用於檔案之間字元的流轉.對於可以理解為FileRead的一個包裝提高了效率
BufferedReader,
readLine()
可以進行整行的檔案讀取,
BufferedWrite,
write()
newLine()
進行換行。
這裡我們直接建立一個String類的獲取readLine拿到的整行字元,然後進行write寫入即可
使用while迴圈,條件為讀取完畢返回的null
純文字之間的字元操作應優先考慮緩衝字元流提高效率。
5.位元組陣列流:一種通過位元組方式資料流轉方式,是一種節點流,具體操作方式為將其他型別資料通過位元組陣列的方式流轉資料。預設32為陣列進行資料寫入。
ByteArrayInputStream;
ByteArrayOutputStream; (32位陣列
6.資料流:
一種處理流,包裹緩衝流BufferedInputStream,BufferedOutputStream,而緩衝類包裹了InputStream,OutputStream
將位元組資料處理為一種可以對接的型別如String,int等,方便了資料的處理,一般我們在伺服器和主機之間常常使用
DataInputStream;
DataOutputStream;
提取和寫入的順序需要一致。
理想狀態為包裝緩衝流,在Close的時候關閉最外層的流,即資料流即可。
7.轉換流:將位元組轉換為字元
InputStreamReader 的作用是把 InputStream 轉換成 Reader ,OutputStreamWriter 的作用是把 OutputStream 轉換成 Writer
這裡需要注意的是。在轉換為字元的時候,需要確定字符集。
8.物件流:將資料轉換為物件的形式進行讀寫的方式。
ObjectOutputStream;(序列化
ObjectInputStream; (反序列化
transient 和static修飾的變數無法儲存。
serialVersionUID版本號需要在對於該物件的類進行宣告,否則會導致反序列化失敗提示NotSerializableException。
[ 註解:這裡需要知道的是,如果某個流需要帶入一個其他流來進行實現的話,那麼這個流必然是處理流。] [ 處理流需要處理的資料,一般是:] [ 轉換格式] [ InPutStream -->; InPutStreamRead] [ 提高效率] [ InputStream -->BufferedInPutStream]