Java: Memory efficient ByteArrayOutputStream
2022-09-02 12:04:02
我在磁盘中有一个40MB的文件,我需要使用字节数组将其“映射”到内存中。
起初,我认为将文件写入ByteArrayOutputStream是最好的方法,但我发现在复制操作期间的某个时候需要大约160MB的堆空间。
有人知道在不使用三倍于RAM文件大小的情况下执行此操作的更好方法吗?
更新:感谢您的回答。我注意到我可以减少内存消耗,告诉ByteArrayOutputStream初始大小比原始文件大一点(使用与我的代码强制重新分配的确切大小,必须检查原因)。
还有另一个高内存点:当我用ByteArrayOutputStream.toByteArray获得byte[]时。看看它的源代码,我可以看到它正在克隆数组:
public synchronized byte toByteArray()[] {
return Arrays.copyOf(buf, count);
}
我想我可以扩展ByteArrayOutputStream并重写此方法,以便直接返回原始数组。考虑到流和字节数组不会多次使用,这里是否存在任何潜在危险?