『黑馬程序員』---java--IO--分段讀寫-操作基本類型-內存爲源

----------- android培訓java培訓、java學習型技術博客、期待與您交流! ------------

java.io 

類 RandomAccessFile可以實現分段數據寫入(迅雷)

public class RandomAccessFile  extends Object

implements DataOutputDataInputCloseable

該類不算是IO體系中的子類,而是直接繼承自Object.但是他是IO包中的成員,因爲他具備讀和寫功能.內部封裝了一個數組,而且通過指針對數組的元素進行操作,可以通過getFilePointer獲取指針的位置,同時可以通過seek改變指針的位置,具體概括如下:

此類的實例支持對隨機訪問文件的讀取和寫入。隨機訪問文件的行爲類似存儲在文件系統中的一個大型 byte 數組。存在指向該隱含數組的光標或索引,稱爲文件指針;輸入操作從文件指針開始讀取字節,並隨着對字節的讀取而前移此文件指針。如果隨機訪問文件以讀取/寫入模式創建,則輸出操作也可用;輸出操作從文件指針開始寫入字節,並隨着對字節的寫入而前移此文件指針。寫入隱含數組的當前末尾之後的輸出操作導致該數組擴展。該文件指針可以通過 getFilePointer 方法讀取,並通過 seek 方法設置。 

通常,如果此類中的所有讀取例程在讀取所需數量的字節之前已到達文件末尾,則拋出 EOFException(是一種 IOException)。如果由於某些原因無法讀取任何字節,而不是在讀取所需數量的字節之前已到達文件末尾,則拋出 IOException,而不是 EOFException。需要特別指出的是,如果流已被關閉,則可能拋出 IOException。 

(其實完成讀寫的原理就是內部封裝了字節輸入輸出流[操作數據必然是流])


通過構造函數可以看出,他有侷限性,只能操作文件.而且操作文件還有模式:

模式爲只讀r時, 操作文件不存在,不會創建.

模式爲rw時,操作文件不存在,會自動創建,如果存在,不會覆蓋.wiret寫.


通過,以下方法改變指針的位置,實現指定位置數據寫入.



其實下載軟件,的原理就是分段下載數據.該方法就可以通過指針實現.

可以操作基本數據類型的數據流對象

DataOutputStream(OutputStream out) 
          創建一個新的數據輸出流,將數據寫入指定基礎輸出流。

DataInputStream(InputStream in) 
          使用指定的底層 InputStream 創建一個 DataInputStream

基本讀寫實例:



特殊方法:

 void

writeUTF(String str) 
          以與機器無關方式使用 UTF-8 修改版編碼將一個字符串寫入基礎輸出流。

指定編碼表寫入,讀出時也要用相對應的編碼表讀取…………………………..

static String

readUTF(DataInput in) 
 從流 in 中讀取用 UTF-8 修改版格式編碼的 Unicode 字符格式的字符串;然後以 String 形式返回此字符串。


都是以內存爲源爲目的的操作



以操作數組爲例簡單說一下(其他同理)

直接操作字節數組的流對象(流的思想操作數組)
類 ByteArrayInputStream

public class ByteArrayInputStream

extends InputStream

在構造的時候,需要接收數據源,而卻數據源是一個字節數組.

ByteArrayInputStream 包含一個內部緩衝區,該緩衝區包含從流中讀取的字節。內部計數器跟蹤 read 方法要提供的下一個字節。 

關閉 ByteArrayInputStream 無效。此類中的方法在關閉此流後仍可被調用,而不會產生任何 IOException。


java.io 
類 ByteArrayOutputStream

public class ByteArrayOutputStream

extends OutputStream

在構造的時候,不用定義數據目的,因爲,改對像中已經內部封裝了可變長度的字節數組,這就是數據目的地.

此類實現了一個輸出流,其中的數據被寫入一個 byte 數組。緩衝區會隨着數據的不斷寫入而自動增長。可使用 toByteArray() 和 toString() 獲取數據。 

關閉 ByteArrayOutputStream 無效。此類中的方法在關閉此流後仍可被調用,而不會產生任何 IOException。 

因爲這兩個流對象都操作的是數組,並沒有使用系統資源.所以,不用進行close關閉.

下面是一個特有的方法.可以一次性將內存中的數組寫到文件中


void

writeTo(OutputStream out) 
          將此 byte 數組輸出流的全部內容寫入到指定的輸出流參數中,這與使用 out.write(buf, 0, count) 調用該輸出流的 write 方法效果一樣。

因爲,該方法設計到輸出流操作底層資源,所以,就她設計到了異常……



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