java IO 讀寫類的關係

2021-08-17 06:08:27 字數 3448 閱讀 8208

目錄

reader

1----bufferedreader

1----inputstreamreader

2--------filereader

3writer

3inputstream

3----fileinputstream

4--------bufferedinputstream

4outputstream

4randomaccessfile

5用於讀取字元流的抽象類。

reader

——bufferedreader

——inputstreamreader

——filereader

從字元輸入流中讀取文字

,緩衝各個字元,從而實現字元、陣列和行的高效讀取。

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

通常,reader

所作的每個讀取請求都會導致對底層字元或位元組流進行相應的讀取請求。因此,

建議用bufferedreader

包裝所有其

read()

操作可能開銷很高的

reader

(如filereader

和inputstreamreader

)。例如,

bufferedreader in

= new bufferedreader(new filereader("foo.in"));

將緩衝指定檔案的輸入。如果沒有緩衝,則每次呼叫

read()

或readline()

都會導致從檔案中讀取位元組,並將其轉換為字元後返回,而這是極其低效的。

inputstreamreader 是

位元組流通向字元流的橋梁

,這裡可以指定編碼方式,如:

newinputstreamreader(

newfileinputstream(f1),

"gb2312"

)每次呼叫

inputstreamreader 中的乙個 read() 方法都會導致從底層輸入流讀取乙個或多個位元組。要啟用從位元組到字元的有效轉換,可以提前從底層流讀取更多的位元組,使其超過滿足當前讀取操作所需的位元組。

為了達到最高效率,可要考慮在

bufferedreader 內包裝 inputstreamreader。例如:

用來讀取字元檔案

的便捷類。此類的構造方法假定預設字元編碼和預設位元組緩衝區大小都是適當的。要自己指定這些值,可以先在

fileinputstream 上構造乙個 inputstreamreader。

filereader

用於讀取字元流。要讀取原始位元組流,請考慮使用

寫入字元流的抽象類。

writer

——bufferedwriter

——inputstreamwriter

——filewriter

此抽象類是表示位元組輸入流的所有類的超類

inputstream

——fileinputstream

——filterinputstream

——bufferedinputstream

fileinputstream

從檔案系統中的某個

檔案中獲得輸入位元組

。哪些檔案可用取決於主機環境。

fileinputstream

用於讀取諸如影象資料之類的原始位元組流

。要讀取字元流,請考慮使用

為另乙個輸入流新增一些功能,即緩衝輸入以及支援

mark

和reset

方法的能力。在建立

bufferedinputstream

時,會建立乙個內部緩衝區陣列。在讀取或跳過流中的位元組時,可根據需要從包含的輸入流再次填充該內部緩衝區,一次填充多個位元組。

mark

操作記錄輸入流中的某個點,

reset

操作使得在從包含的輸入流中獲取新位元組之前,再次讀取自最後一次

mark

操作後讀取的所有位元組。

此抽象類是表示輸出位元組流的所有類的超類。

outputstream

——fileoutputstream

——filteroutputstream

——bufferedoutputstream

此類的例項支援對隨機訪問檔案的讀取和寫入。隨機訪問檔案的行為類似儲存在檔案系統中的乙個大型

byte 陣列。存在指向該隱含陣列的游標或索引,稱為

檔案指標

;輸入操作從檔案指標開始讀取位元組,並隨著對位元組的讀取而前移此檔案指標。如果隨機訪問檔案以讀取

/寫入模式建立,則輸出操作也可用;輸出操作從檔案指標開始寫入位元組,並隨著對位元組的寫入而前移此檔案指標。寫入隱含陣列的當前末尾之後的輸出操作導致該陣列擴充套件。該檔案指標可以通過

getfilepointer

方法讀取,並通過

seek

方法設定。

通常,如果此類中的所有讀取例程在讀取所需數量的位元組之前已到達檔案末尾,則丟擲

eofexception

(是一種

ioexception

)。如果由於某些原因無法讀取任何位元組,而不是在讀取所需數量的位元組之前已到達檔案末尾,則丟擲

ioexception

,而不是

eofexception

。需要特別指出的是,如果流已被關閉,則可能丟擲

java IO位元組流讀寫檔案

如果是按照資料的流向劃分 輸入流 輸出流以當前程式做參照物,觀察資料是流入還是流出,如果流出,則使用輸出流,如果資料是流入,則使用輸入流。如果按照處理的單位劃分 位元組流 位元組流讀取得都是檔案中二進位制資料,讀取到二進位制資料不會經過任何的處理。字元流 字元流讀取的資料是以字元為單位的 字元流也是...

java IO流檔案的讀寫具體例項

io流的分類 1 根據流的資料物件來分 高階流 所有的記憶體中的流都是高階流,比如 inputstreamreader 低端流 所有的外界裝置中的流都是低端流,比如inputstream,outputstream 如何區分 所有的流物件的字尾中包含reader或者writer的都是高階流,反之,則基...

Java IO處理類的彙總

版的 文本版的 輸入輸出資料型別 說明inputstream outputstream byte 最底層bytearrayinputstream bytearrayoutputstream byte 帶位元組緩衝 緩衝fileinputstream fileoutputstream byte 直接對...