java基礎知識點梳理4

IO

流的分類

方向分:輸入流和輸出流

單位分:字節流和字符流

功能分:節點流和包裝流

字節單位

InputStream(輸入 讀) OutputStream(輸出 寫)

FileInputStream FileOutputStream (處理對象 File)

ByteArrayInputStream ByteArrayOutputStream (處理對象 ByteArray)

PipedInputStream PipedOutputStream (處理對象 Piped)


字符單位(讀寫是遇到中文字符時讀寫半個字節的問題)

Reader(輸入 讀) Writer(輸出 寫)

FileReader FileWriter (處理對象 File)

CharArrayReader CharArrayWriter (處理對象 CharArray)

PipedReader PipedWriter (處理對象 Piped)


包裝流

沒有明確的處理節點,依附在節點流之上,爲節點流讀寫數據時提供額外的功能。

BufferedInputStream/BufferedOutputStream提供緩衝功能

DataInputStream/DataOutputStream提供更多的數據讀寫方法

ObjectInputStream/ObjectOutputStream提供對象的序列化與反序列化功能


緩衝

close方法

1、強制刷新緩衝區flush()。

2、關閉資源。


close()flush()的區別:

flush():將緩衝區的數據刷到目的地中後,流可以使用。

close():將緩衝區的數據刷到目的地中後,流就關閉了,該方法主要用於結束調用的底層資源。這個動作一定做。

io異常的處理方式:io一定要寫finally


IO中的使用到了一個設計模式:裝飾設計模式。

裝飾設計模式解決:對一組類進行功能的增強。

包裝:寫一個類(包裝類)對被包裝對象進行包裝;

 * 1、包裝類和被包裝對象要實現同樣的接口;

 * 2、包裝類要持有一個被包裝對象;

 * 3、包裝類在實現接口時,大部分方法是靠調用被包裝對象來實現的,對於需要修改的方法我們自己實現;


字符流:

Reader用於讀取字符流的抽象類。子類必須實現的方法只有 read(char[], int, int) close()

     |---BufferedReader從字符輸入流中讀取文本,緩衝各個字符,從而實現字符、數組和行的高效讀取。

以指定緩衝區的大小,或者可使用默認的大小。大多數情況下,默認值就足夠大了。     

 |---LineNumberReader跟蹤行號的緩衝字符輸入流。此類定義了方法setLineNumber(int) getLineNumber(),它們可分別用於設置和獲取當前行號。

 |---InputStreamReader是字節流通向字符流的橋樑:它使用指定的 charset 讀取字節並將其解碼爲字符。它使用的字符集可以由名稱指定或顯式給定,或者可以接受平臺默認的字符集。

 |---FileReader用來讀取字符文件的便捷類。此類的構造方法假定默認字符編碼和默認字節緩衝區大小都是適當的。要自己指定這些值,可以先在 FileInputStream 上構造一個 InputStreamReader

 |---CharArrayReader

 |---StringReader

-------------------------------------------------

Writer寫入字符流的抽象類。子類必須實現的方法僅有 write(char[], int, int)flush() close()

 |---BufferedWriter將文本寫入字符輸出流,緩衝各個字符,從而提供單個字符、數組和字符串的高效寫入。

 |---OutputStreamWriter是字符流通向字節流的橋樑:可使用指定的 charset 將要寫入流中的字符編碼成字節。它使用的字符集可以由名稱指定或顯式給定,否則將接受平臺默認的字符集。

 |---FileWriter用來寫入字符文件的便捷類。此類的構造方法假定默認字符編碼和默認字節緩衝區大小都是可接受的。要自己指定這些值,可以先在 FileOutputStream 上構造一個 OutputStreamWriter

 |---PrintWriter

 |---CharArrayWriter

 |---StringWriter

---------------------------------

字節流:

InputStream是表示字節輸入流的所有類的超類。

     |---FileInputStream從文件系統中的某個文件中獲得輸入字節。哪些文件可用取決於主機環境。FileInputStream 用於讀取諸如圖像數據之類的原始字節流。要讀取字符流,請考慮使用 FileReader

     |--- FilterInputStream包含其他一些輸入流,它將這些流用作其基本數據源,它可以直接傳輸數據或提供一些額外的功能。

       |--- BufferedInputStream該類實現緩衝的輸入流。

       |--- Stream

     |--- ObjectInputStream

     |--- PipedInputStream

-----------------------------------------------

OutputStream此抽象類是表示輸出字節流的所有類的超類。

     |---FileOutputStream文件輸出流是用於將數據寫入 File FileDescriptor的輸出流。

     |--- FilterOutputStream此類是過濾輸出流的所有類的超類。

       |--- BufferedOutputStream該類實現緩衝的輸出流。

       |--- PrintStream

       |--- DataOutputStream

     |--- ObjectOutputStream

     |--- PipedOutputStream

--------------------------------

緩衝區是提高效率用的,給誰提高呢?

BufferedWriter是給字符輸出流提高效率用的,那就意味着,緩衝區對象建立時,必須要先有流對象。明確要

提高具體的流對象的效率。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章