Java 使用apache io utils将文件读取到字节数组时出现内存不足错误

Java 使用apache io utils将文件读取到字节数组时出现内存不足错误,java,out-of-memory,bouncycastle,Java,Out Of Memory,Bouncycastle,我已经创建了一个类来为文件生成校验和,使用apache文件utils和bouncy castle来生成校验和。我使用apache的-IOUtils读取了给定的文件,并使用bouncy castle的-bcprov生成校验和 我使用的代码如下所示: byte[] digest = null; String result = ""; SHA1.Digest sha1 = new SHA1.Digest(); sha1.update(IOUtils.toByteArray(new FileInput

我已经创建了一个类来为文件生成校验和,使用apache文件utils和bouncy castle来生成校验和。我使用apache的-IOUtils读取了给定的文件,并使用bouncy castle的-bcprov生成校验和

我使用的代码如下所示:

byte[] digest = null;
String result = "";

SHA1.Digest sha1 = new SHA1.Digest();
sha1.update(IOUtils.toByteArray(new FileInputStream(file)));
digest = sha1.digest();

for (int i = 0; i < digest.length; i++)
{
     result += Integer.toString((digest[i] & 0xff) + 0x100, 16).substring(1);
}

我需要增强我的代码吗?任何帮助都将不胜感激。

您的代码崩溃正是因为IOUtils.toByteArray(新文件输入流(file)),SHA并不重要

有关更多信息,请参见以下示例:

这段代码在200 MB的文件上运行良好,这要归功于@SlipperySeal和以下内容:


您为JVM提供了多少堆空间?无论如何,80meg是一个巨大的内存量,需要尝试将其分配为字节数组。我建议您将其以较小的块推进摘要检查以下内容:我已经给出了-Xmx256,因为我的测试机有2GB的RAMRead,并以较小的缓冲区块进行更新,并为您的建议增加Xmx大小@ravindra
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at org.apache.commons.io.output.ByteArrayOutputStream.toByteArray(ByteAr rayOutputStream.java:322)
        at org.apache.commons.io.IOUtils.toByteArray(IOUtils.java:463)
        at com.test.hashgenerator.HashGenerator.getSHA1CheckSum(HashGe nerator.java:230)
        at com.test.hashgenerator.HashGenerator.main(HashGenerator.jav a:319)
public byte[] createSha1(File file) throws Exception  {
MessageDigest digest = MessageDigest.getInstance("SHA-1");
InputStream fis = new FileInputStream(file);
int n = 0;
byte[] buffer = new byte[8192];
while (n != -1) {
    n = fis.read(buffer);
    if (n > 0) {
        digest.update(buffer, 0, n);
    }
}
return digest.digest();
}