MappedByteBuffer的實際開發遇到的問題

來源:互聯網
上載者:User

標籤:instance   理解   bsp   logs   file   計算   線程   使用   代碼   

今天在做一個檔案上傳的時候遇到讀取檔案使用到了MappedByteBuffer這個類,網上看了一大推資料說這個類在處理讀取檔案時比較好,尤其是大型檔案,

代碼如下:messagedigest = MessageDigest.getInstance("MD5");
            
            in = new FileInputStream(file);
            ch = in.getChannel();
            MappedByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, 0,
                    file.length());
            messagedigest.update(byteBuffer);
            md5 = bufferToHex(messagedigest.digest()).toUpperCase();
            byteBuffer.clear();

最後調用時刪除原來的的檔案時,總是刪不掉,後來進行物理刪除發現該檔案時被程式佔用,最後一步步排除發現是MappedByteBuffer這個類在搗鬼,發現網上有說有兩種解決方案,比較用的是顯示調用System.gc()方法,但如果有架構如果禁用這種調用記憶體回收行程的話,就有問題了,,

  網上發現有兩片文章說的好 http://www.cnblogs.com/ironPhoenix/p/4204472.html   http://www.cnblogs.com/huxi2b/p/6637425.html

 不過自己最後通過實現byteBuffer.flip()方法後,可以解決以上兩篇文章說到的弊端,可以刪除原檔案了。

  不知道是自己僥倖還是什麼情況,希望大神能幫忙分析下原因,讓小弟更明白,主要對電腦的線程和進程原理你是很理解。

  

 

MappedByteBuffer的實際開發遇到的問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.