我已经测试过小于10mb、100mb和500mb的文件,加密工作正常。但是,当我想要加密1gb以上的大文件时出现了问题。
我使用JAVA生成了一个大文件(约2gb),并想使用AES加密它,但是我遇到了以下错误:
"Exception in thread "main" java.lang.OutOfMemoryError: Java heap space"
我尝试通过使用-Xmx8G来增加可用内存,但并没有成功。
以下是我的部分代码。
据我所知,它出现这种情况的原因是它试图一次性读取整个文件,将其加密,并将其存储到另一个字节数组中,而不是缓冲和流式传输。有谁能给我一些代码提示吗?
我是一个编程的初学者,所以我不是很懂,请大家帮帮忙,谢谢!
File selectedFile = new File("Z:\\dummy.txt");
Path path = Paths.get(selectedFile.getAbsolutePath());
byte[] toencrypt = Files.readAllBytes(path);
byte[] ciphertext = aesCipherForEncryption.doFinal(toencrypt);
FileOutputStream fos = new FileOutputStream(selectedFile.getAbsolutePath());
fos.write(ciphertext);
fos.close();
据我所知,它出现这种情况的原因是它试图一次性读取整个文件,将其加密,并将其存储到另一个字节数组中,而不是缓冲和流式传输。有谁能给我一些代码提示吗?
我是一个编程的初学者,所以我不是很懂,请大家帮帮忙,谢谢!
Cipher
会为您处理底层块大小。 - user207421