java - Java中InputStream的内存问题

标签 java inputstream

我需要将文件读入字节数组。整个文件需要读入数组。问题是我收到 OutOfMemory 错误,因为文件大小太大。增加-XmX似乎没有任何效果。这是代码片段:

InputStream in = new FileInputStream(file);
long length = file.length();                        
byte[] out = new byte[(int)length]; 
// Process the byte array

问题发生在字节数组实例期间。是否有内存消耗较少的解决方法来解决此问题?

最佳答案

使用此方法时,您需要拥有比最大文件多得多的可用内存。鉴于一台 24 GB 的机器成本不到 2000 英镑,这个想法不再像以前那么愚蠢了。实际上,在某些情况下,一个 byte[] 的 2GB 限制更让人头疼。

但是,读取 InputStream 的常用方法是一次读取一个 8KB 的 block 。这样您只需拥有远超过 8KB 的可用空间。

顺便说一句:您可以使用 -mx1g 而不是您正在使用的选项。

关于java - Java中InputStream的内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4826764/

相关文章:

java - 从 HttpURLConnection InputStream 获取不正确的输出

java - 如何通过泛型实例化?

java - Sonar 违规 : "Method may fail to close stream on exception"

java - Spring crypto 无效 key 大小

java - 上传文件大小超过限制时如何取消表单提交?

java - 重新实现 org.apache.commons.net.io.Util 来解析 InputStream

java - 解码 [] 字节我只得到字符�����

java - 从 Servlet 请求输入流读取时套接字超时

java - BeanIO - 如何将 null 分配给空列表

java - AMQP 中的 channel 和链接有什么区别?