2015-04-05 17 views
0

我正在寫一個Java程序,我正在加密和解密文件。我把這些文件視爲基本的字節數組 - 佔用N個字節,加密並寫入新文件,重複。和解密時類似。複製整個文件到內存與做多個磁盤訪問

對於這一點,我目前拷貝整個文件轉換成字節數組:

byte[] fileAsBytes = Files.readAllBytes(Paths.get(pathToFile))

但隨後處理更大的文件,我跑出來的堆空間。 (我知道我可以增加JVM的可用內存,但是這隻能避免這個問題,另外我還必須在內存更有限的Android手機上運行)。

所以,我正考慮只從磁盤讀取N個字節,而不是複製所有字節,然後從內存中讀取它們。

我的問題是 - 什麼是最好的方法來做到這一點?我不需要隨機訪問,因爲我將按順序讀取文件。另外,我正在看減速多少?因爲從我研究的內容來看,硬盤訪問比內存訪問慢得多。

回答

3

你沒有任何選擇,所以'減速'不是一個考慮因素。你必須做到一口大小的塊。一次說64k。你甚至可能會發現它更快。

+0

我同意,你應該讀取/寫入文件塊。類似的東西是在Apache Commons IO和其他應用中完成的,例如在這裏看到:http://stackoverflow.com/a/22128215/1028256 – Mixaz 2015-04-05 09:32:25

0

最簡單的方法是使用CipherInputStreamCipherOutputStream類。這些類爲您提供緩衝或「零碎」加密。取決於你想做什麼,它們不一定是完美的。如果他們缺乏,那麼你可以管理自己的緩衝。當然,這個類充滿了在方便的塊中加密/解密的方法。

相關問題