中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java 實現文件隨機讀寫-RandomAccessFile

發布時間:2020-06-30 06:44:46 來源:網絡 閱讀:1203 作者:17099933344 欄目:軟件技術

RandomAccessFile是Java中輸入,輸出流體系中功能最豐富的文件內容訪問類,它提供很多方法來操作文件,包括讀寫支持,與普通的IO流相比,它最大的特別之處就是支持任意訪問的方式,程序可以直接跳到任意地方來讀寫數據。

如果我們只希望訪問文件的部分內容,而不是把文件從頭讀到尾,使用RandomAccessFile將會帶來更簡潔的代碼以及更好的性能。

下面來看下RandomAccessFile類中比較重要的2個方法,其他的和普通IO類似,在這里,就不詳細說明了。

方法名作用
getFilePointer()返回文件記錄指針的當前位置
seek(long pos)將文件記錄指針定位到pos的位置

功能one,讀取任意位置的數據,代碼如下
public static void randomRed(String path,int pointe){ 

try{  

RandomAccessFile raf=new RandomAccessFile(path, "r");  

raf.seek(pointe);//移動文件指針位置  

byte[]  buff=new byte[1024];  

//用于保存實際讀取的字節數  

int hasRead=0; 

//循環讀取 

while((hasRead=raf.read(buff))>0){ 

 //打印讀取的內容,并將字節轉為字符串輸入

System.out.println(new String(buff,0,hasRead));  

 }

}catch(Exception e){  

          e.printStackTrace();  

  }  

至此,RandomAccessFile類的幾個功能,散仙在代碼中已給出實現了,現在回到本文開始前的提的那個需求,用RandomAccessFile類就可以輕而易舉的完成了,另外需要注意的是,向指定位置插入數據,是散仙自己改造的功能,RandomAccessFile并不直接支持,需要新建一個緩沖區臨時空間,存數據,然后在寫,因為一旦數據量上了級別,在任意位置插入數據,是很耗內存的,這個也就是為什么hadoop的HDFS文件系統,只支持append的方式,而沒有提供修改的操作。


另外我們可以用RandomAccessFile這個類,來實現一個多線程斷點下載的功能,用過下載工具的朋友們都知道,下載前都會建立兩個臨時文件,一個是與被下載文件大小相同的空文件,另一個是記錄文件指針的位置文件,每次暫停的時候,都會保存上一次的指針,然后斷點下載的時候,會繼續從上一次的地方下載,從而實現斷點下載或上傳的功能,有興趣的朋友們可以自己實現下。


RandomAccessFile讀取的效率

比較Scanner和RandomAccessFile的效率,使用Scanner按行讀取文件效率高好多好多倍,內存占用高一點點而已;而使用RandomAccessFile按行讀取數據效率極低,推薦使用Scanner。

RandomAccessFile類。其I/O性能較之其它常用開發語言的同類性能差距甚遠,嚴重影響程序的運行效率。


在改進之前先做一個基本測試:逐字節COPY一個12兆的文件(這里牽涉到讀和寫)。


耗用時間(秒)
RandomAccessFileRandomAccessFile95.848
BufferedInputStream + DataInputStreamBufferedOutputStream + DataOutputStream2.935


我們可以看到兩者差距約32倍,RandomAccessFile也太慢了。由其源碼可見,RandomAccessFile每讀/寫一個字節就需對磁盤進行一次I/O操作。





向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鲁山县| 宜兰县| 安康市| 杨浦区| 济源市| 长沙县| 文成县| 紫云| 白银市| 石林| 延长县| 景德镇市| 东方市| 高密市| 阜康市| 梁山县| 方山县| 永川市| 镇原县| 吉林省| 夏邑县| 孟津县| 禹州市| 清远市| 平果县| 师宗县| 荔波县| 乐都县| 江北区| 海阳市| 宁德市| 泰和县| 开鲁县| 浪卡子县| 波密县| 茂名市| 南充市| 苍山县| 山西省| 南丹县| 石河子市|