IO流小結

流是字節的序列的抽象概念,數據流向,主要用於硬盤、內存、IO設備上的數據操作。

Java流分爲三類:
1.按照處理數據大小:字節流和字符流
2.按照流的方向:輸入流和輸出流
3.按照功能分爲:節點流和處理流

字節流和字符流:

1)字節流 : 讀取數據的最小單位是字節,8bit,有兩個抽象基類InputStream/OutputStream,可以處理設備上的所有類型數據。

2)字符流:讀取數據的最小單位是字符,原理是基於字節流讀取字節後查詢指定編碼表,返回對應字符,有兩個抽象基類Reader/Writer,只能處理文本類型數據。

InputStream中常見的方法:

int read()

讀取一個字節,返回值爲所讀得字節

int read(byte b[])

讀取多個字節,放置到字節數組b中,通常讀取的字節數量爲b的長度,返回值爲實際獨取的字節的數量。

int read(byte b[] ,int off,int len)

讀取len個字節,放置到以下標off開始字節數組b中,返回值爲實際讀取的字節的數量。

int available()

返回值爲流中尚未讀取的字節的數量。

long skip(long n)

讀指針跳過n個字節不讀,返回值爲實際跳過的字節數量

close()

流操作完畢後必須關閉

mark(int readlimit)

紀錄當前指針的所在位置.readlimit表示讀指針讀出的readlimit個字節後所標記的指針位置才實效。

reset()

把讀指針重新指向用mark方法所記錄的位置

boolean markSupported()

當前的流是否支持讀指針的記錄功能。

OutputStream中常見的方法:

write(int b)

往流中寫一個字節b

write(byte b[])

往流中寫一個字節數組b

write(byte b[],int off,int len)

把字節數組b中從下標off開始,長度爲len的字節寫入流中

flush()

刷空輸出流,並輸出所有被緩存的字節,由於某些流支持緩存功能,該方法將把緩存中所有內容強制輸出到流中。

close()

流操作完畢後必須關閉。

Reader中常見的方法:

int read()

讀取一個字符,並返回讀到的這個字符,讀到流的末尾則返回-1。

int read(char[])

將讀到的字符存入指定的數組中,返回的是讀到的字符個數,

讀到流的末尾則返回-1。

close()

讀取字符其實用的是window系統的功能,就希望使用完畢後,

進行資源的釋放。

FileReader除了自己的構造函數外沒有特有的方法:

–用於讀取文本文件的流對象。
–用於關聯文本文件。
–構造函數FileReader(String fileName)

在讀取流對象初始化時,必須要指定一個被讀取的文件,

如果該文件不存在則會發生FileNotFoundException異常。

Writer中常見的方法:

write()

將一個字符寫入到流中。

write(char[])

將一個字符數組寫入到流中。

writer(String)

將一個字符寫入到流中。

flush()

刷新流,將流中的數據刷新到目的地中,流還存在。

close()

關閉資源,在關閉錢會先調用flush(), 刷新流中的數據到目的地。

輸入流和輸出流:

1)輸入流:文件----》程序
2)輸出流:程序----》文件

處理流和節點流(重點介紹):
1)節點流:直接對數據源進行讀寫操作
2)處理流:在節點流的基礎上,通過裝飾(裝飾模式)增強功能對數據源間接讀寫操作

 1)緩衝流(Buffered):節點流之上進行加工,添加緩衝區(FileInputStream=>BufferedInputStream)這樣避免讀取文件時候,大量進行對硬盤的讀寫,而是從緩衝區進行讀寫,提高讀寫效率。

 2)轉換流(StreamReader):即字節流與字符流的相互轉換。比如:在進行讀寫字節流設備時候,我想調用讀取字符流的函數,就可以通過轉換流。將(字節流=>字符流) InputStreamReader in=new InputStreamReader(new InputStream())注意只能是字節流轉換爲字符流!!

 3) 數據流(Data):當讀取寫入具體的數值數據時候(Long Double)就可以採用DataInputStream和DataOutputStream流進行功能更加強大的寫入和讀取功能。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章