Java常用API 之 java.io.Reader字符流(附解析和示例)_09

java.io.Reader類描述:

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

抽象類的概念:

抽象類是指擁有抽象方法的類,包含一個或多個抽象方法的類必須被聲明爲抽象的。但除了抽象的方法之外,抽象類還可以包含具體數據和具體方法,這一點與普通類一樣。抽象方法充當着佔位的角色,它們的具體實現在子類中。拓展抽象類可以有兩種選擇,一種是在子類中實現抽象類(父類)的部分抽象類方法或不實現抽象類(父類)的抽象方法,這樣就子類也成了抽象類;另一種是在子類中實現抽象類(父類)的全部抽象方法,這樣一來,子類就不是抽象的了。


public abstract class Reader //源碼:Reader類的聲明
extends Object
implements Readable, Closeable

Reader類實現了Java.lang.Readable接口和java.io.Closeable接口。

  1. Readable接口代表一個字符源,實現了Readable接口的字符可以通過調用read( )方法將字符添加到指定的字符緩衝區。 int read(CharBuffer cb) ,返回的是添加到到緩衝區的的字符數量,如果字符源已在末端,則返回-1。
  2. Closeable接口代表一個可以關閉的數據源。調用void close( )方法可以關閉數據流並釋放與此數據流關聯的所有系統資源。

--------------------------------------------------------靜態變量-------------------------------------------------------

protected  Object lock :用於同步對此流操作的對象。爲了提高效率,字符流對象可以使用其自身以外的對象來保護臨界區。因此,子類應使用此字段中的對象,而不是使用this 或者使用同步方法。

臨界區的概念:臨界區指的是某段代碼區,這段代碼操作了被多個對象共享的資源,這部分代碼需引入同步機制來保證一個對象在臨界區運行時其他對象暫時不能對臨界區進行訪問。

------------------------------------------------------構造函數------------------------------------------------------

構造函數
protected Reader( )創建一個新的字符流 reader,其臨界區與自身同步。
protected Reader(Object lock)創建一個新的字符流 reader,其臨界區與指定對象同步。

---------------------------------------對象方法(前兩個是抽象方法,子類必須實現它們)------------------------

方法
abstract  void close( )  關閉該流並釋放與之關聯的所有資源。
abstract  int read(char[ ] cbuf, int off, int len)  將字符讀入數組的某一部分。
 int read( ) 讀取單個字符。發生 I/O 錯誤或者已到達流的末尾,此方法就會進入阻塞狀態,直到字符可用纔回到就緒狀態。
用於支持高效的單字符輸入的子類應重寫此方法。
int read(CharBuffer target) 試圖將字符讀入指定的字符緩衝區。如果發生 I/O 錯誤或者已到達流的末尾,此方法會進入阻塞狀態。
 int read(char[ ] cbuf) 將字符讀入數組。如果發生 I/O 錯誤或者已到達流的末尾,此方法會進入阻塞狀態。
void mark(int readAheadLimit) 標記流中的當前位置。對 reset( ) 的調用將嘗試將該流重新定位到標記點。並不是所有的字符輸入流都支持 mark( ) 操作。
boolean markSupported( ) 判斷此流是否支持 mark() 操作。默認實現始終返回 false。子類應重寫此方法。
boolean ready( ) 判斷是否準備讀取此流。如果保證下一個 read( ) 不被阻塞,則返回 True,否則返回 false。注意,返回 false 並不保證下一次讀取會被阻塞,也就是說處於不確定的狀態。
void reset( ) 重置該流。如果流已標記過,則嘗試將流重新定位到標記點。如果流未標記過,則以特定的某種適合的方式嘗試重置該流,例如,通過將該流重新定位到起始點。並不是所有的字符輸入流都支持 reset() 操作,有些支持 reset() 而不支持 mark()。
long skip(long n) 跳過n個字符。如果發生 I/O 錯誤或者已到達流的末尾,此方法會進入

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

java6中文文檔在這部分翻譯的好渣,各種錯誤。。不得不對照着英文文檔看

發佈了52 篇原創文章 · 獲贊 47 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章