標籤:write 技術分享 piped 函數 通過 寫入 重點 建議 height
首先上在網上找的InputStream和OutputStream的類圖結構
下面的是Reader 和Writer 的類圖結構
挑重點的講解一下
1.ByteArrayInputStream和ByteArrayOutputStream
顧名思義,位元組輸入資料流和位元組輸出資料流,ByteArrayInputStream( ) 在構造輸入資料流的時候傳進去的是位元組數組,通過read()或者read(byte[] b, int off, int len)方法讀取單個字元,如果讀到結尾返回-1.第二種是一次讀取位元組數組,而不是一個一個的讀.
ByteArrayOutputStream 位元組數組輸出資料流在記憶體中建立一個位元組數組緩衝區,所有發送到輸出資料流的資料儲存在該位元組數組緩衝區中
沒有帶參的建構函式,有兩個方法write(int b)和write(byte[] b, int off, int len)方法, 將位元組數組的參數傳進去,通過ByteArrayOutputStream.write( )方法將位元組數組 輸出到記憶體的位元組數組緩衝區中.
可以通過toByteArray()方法返回位元組數組,writeTo(OutputStream out) 將緩衝區的位元組數組寫進 out 對象中
2.FileInputStream和FileOutputStream
最常用的IO流,FileInputStream(File f),File作為資料來源,通過read() 單個讀取位元組,或者通過read(byte[ ] b)每次讀取一個位元組數組的長度.
FileOutputStream(File f),通過write(byte[ ] b),write(int b)方法將位元組數組或位元組寫入檔案輸出資料流. 這樣可以實現檔案的寫操作.
3.PipedInputStream 和 PipedOutputStream
管道輸入資料流和輸出資料流,主要的作用是實現線程之間的輸入和輸出操作
管道輸入資料流應該串連到管道輸出資料流;管道輸入資料流提供要寫入管道輸出資料流的所有資料位元組。通常,資料由某個線程從 PipedInputStream 對象讀取,並由其他線程將其寫入到相應的 PipedOutputStream。不建議對這兩個對象嘗試使用單個線程,因為這樣可能死結線程。管道輸入資料流包含一個緩衝區,可在緩衝區限定的範圍內將讀操作和寫操作分離開。如果向串連管道輸出資料流提供資料位元組的線程不再存在,則認為該管道已損壞。
在一個線程中通過PipedOutputStream的write()方法寫進輸入資料流,然後 在另一個線程中使用PipedInputStream.read()方法將輸出資料流的內容讀出來.
他們之間通過PipedOutputStream的connect(PipedInputStream in)或者PipedInputStream的connect(PipedInputStream out)方法關聯,實現 線程之間的流的傳輸.
Java IO流