我在磁盤中有一個40MB的文件,我需要使用字節數組將其「映射」到內存中。Java:內存高效ByteArrayOutputStream
起初,我認爲將文件寫入ByteArrayOutputStream將是最好的方式,但我發現在複製操作過程中的某個時刻需要大約160MB的堆空間。
有人知道更好的方式來做到這一點,而不使用三倍的RAM文件大小?
更新:感謝您的回答。我注意到我可以減少內存消耗,告訴ByteArrayOutputStream初始大小比原始文件大小稍大一些(使用我的代碼強制重新分配的確切大小,必須檢查原因)。
還有一個很高的內存點:當我用ByteArrayOutputStream.toByteArray返回byte []時。縱觀它的源代碼,我可以看到它是克隆的數組:
public synchronized byte toByteArray()[] {
return Arrays.copyOf(buf, count);
}
我想我可能只是延長ByteArrayOutputStream和重寫這個方法,因此對原陣列直接返回。鑑於流和字節數組將不會被使用多次,這裏是否存在潛在的危險?
同類問題http://stackoverflow.com/questions/964332/java-large-files-disk-io-performance – Santosh