1
2
一个问题是在内存中保存数组和数组的副本。 读写块。
然后
因此:
解释 某些字节块的加密如下:
或者代替最后一个doFinal:
每一个
如果只有一个字节块,那么调用
那么就不要打电话给
对于其余部分,我使用了try with resources语法,该语法自动关闭输入和输出流,即使
而不是
|
2
1
看看这四个变量:
实际上,你在
所有这些变量都在同一范围内,从不赋值
您可以增加最大堆限制(请参阅 Increase heap size in Java ),但这将严重限制您的程序。
程序写入时抛出内存不足错误
您应该做的是创建一个循环,读取文件的一部分,对其进行加密,然后写入另一个文件。这将避免将整个文件加载到内存中。线条如
|
3
0
在迭代文件时,请保留一个计数器来跟踪字节数:
然后使用构造函数创建输出缓冲区,该构造函数接受一个size参数:
这将避免内部缓冲区增长。增长可能是非线性的,因此随着每次迭代添加更多字节,下次增长时会分配更多空间。 但这可能仍然不起作用,具体取决于文件大小。另一种方法是:
这样可以避免将所有常规文件和加密文件同时存储在内存中。 |
MarcForn · 加密/解密字符串Kotlin 6 年前 |
Neeraj Athalye · 加密期间发生Java内存不足错误 6 年前 |
Kuno Heltborg · 尝试用其他语言解密时AES解密错误 6 年前 |
Tim Tuckle · 用Java加密字符串 6 年前 |