心智圖資源庫 Java IO(藍旭第三次訓練預習)
介紹了常見的java_io流,Java的IO流是用於在Java應用程式中處理輸入和輸出操作的一系列類別和介面。
編輯於2024-04-06 17:07:56- Java IO
- 簡介
- 定義: 使用Java執行輸入輸出作業
- 目的: 存取不同資料來源和目的地
- 分類: java.io 和 java.nio
- 流的分類
- 輸入流 vs 輸出流
- 位元組流 vs 字元流
- 節點流 vs 處理流
- 其他: 轉換流, 緩衝流, 物件流
- 四大基流
- 位元組流
- OutputStream
類別下的三個方法
write
public void write(byte b[], int off, int len) throws IOException 其意思為將字節數組b中從off開始的len長度的字節輸出到外界的目標區域去.
flush
這個方法的意思是強制將緩衝區中的資料輸出到目標裝置,並清空緩衝區,以避免資料滯留.一般而言要在輸出的最後flush一下,確保不會有殘餘資料留在緩衝區中.
close
這個方法的意思就是把這個輸出流關閉.在輸出流關閉之後,這個流就廢了,啥事也不能幹.
首先,建立一個Out...對象,參數為文件。然後再使用這個參數的write方法,參數為位元組數組,位元組數組由String物件透過getByte()方法轉換而來
- InputStream
read
public abstract int read() throws IOException 意為讀取一個位元組,並回傳讀取到的這個位元組的int形式變數.
public int read(byte b[], int off, int len) throws IOException 和public int read(byte b[]) throws IOException與之前的說到的輸出流意思幾乎一樣,只不過這個是輸入到b數組裡邊去.傳回值為讀取的位元組總數.
skip
public long skip(long n) throws IOException這個方法的意義是從輸入流中跳過數個位元組,傳回值就是實際上跳過的位元組數.其回傳值和n不一定相等,原因是有可能剩下沒有足夠的位元組數供其跳過.一般而言,這個方法是用來跳過輸入流中不必要的內容的,例如說空格,換行,製表符之類的.
available
close
這個方法代表著對輸入流的關閉,釋放系統資源. 當然也可以使用try-with-resources語句自動關閉輸入流.這樣就不需要顯式地調用close方法了.
重複性地讀入數據
mark
public synchronized void mark(int readlimit)方法用來在流中放置一個標記,並且說明從這個標記處往後最多讀readlimit個字節,標記都是有效的.這個標記地位置其實就是當前流的位置.
reset
public synchronized void reset() throws IOException方法用來將流重新定位到之前的標記處.如果之前沒有調用過mark方法或者已經超出了readlimit的限制就會報異常,這樣一來就相當於可以從流的一個標記出發,反覆地讀取readlimit位元組長度的數據
markSupported
當然了,要能使用mark和reset,必須要確保這個輸入流能夠支持.因此需要先利用markSupported方法詢問是否可以使用
定義一個inputstream類,再呼叫其方法,可惜的是這裡讀寫的指標無法往回,這裡的輸出必須使用char強制轉換,否則亂碼
- 字元流
- Writer
類別下的四個方法
write
abstract public void write(char cbuf[], int off, int len) throws IOException, 其意義為將字符數組cbuf中從off開始的len長度的字節輸出到外界的目標區域去.
append
public Writer append(CharSequence csq, int start, int end) throws IOException,其意義為將字元序列csq的start~end-1這個子字串追加到輸出區域.
重載:public Writer append(char c) throws IOException,其意義為往後追加一個字元c.
flush
close
- Reader
read
skip
ready
這個方法就是用來判斷是否可以從輸入流讀取資料而不會被阻塞.
markSupported
mark
reset
close
這裡的date必須為int型,傳遞ASCII碼
- 常用流
- 位元組輸入流和位元組輸出流
- 字元輸入流和字元輸出流
- 列印流和緩衝流
- 位元組數組流
- ByteArrayInputStream
- ByteArrayOutputStream
處理流(包裝另一個流,參數為流)
- 資料流
- DataInputStream
- DataOutputStream
在使用DataOutputStream寫入基本資料類型時,它們是以二進位形式寫入檔案的。因此,如果直接打開這個檔案會看到一些不可讀的亂碼。這是因為這些二進位資料在文字編輯器中被錯誤地解釋為字元編碼,並因此顯示為亂碼。 如果你想以可讀的形式查看檔案中的數據,可以使用DataInputStream來讀取這些基本資料類型,並將它們轉換為其他可讀形式。 (圖片給了下面轉換串流的例子,因為不充會員只能放五張圖片)
- 轉換流
- InputStreamReader
- OutputStreamWriter
轉換的意思:使用OutputStreamWriter將一個位元組流(FileOutputStream)轉換為字元流,並指定字元編碼為UTF-8。使用InputStreamReader將一個位元組流(FileInputStream)轉換為字元流,並指定字元編碼為UTF-8。體現在途徑上,就像中游的水質改變,體現了包裝的特徵
- 物件流
- ObjectInputStream
- ObjectOutputStream
序列化的意思:把一個物件轉化為二進位形式
- 隨機訪問流
- RandomAccessFile
- 使用方法
- 選擇合適流類型
- 建立流對象
- 運用串流方法
- 關閉串流釋放資源(try with resourse)
- 注意事項
- 例外處理
- 輸入驗證
- 序列化要求
- 隨機存取流的特殊操作