私はのAndroidアプリケーションを開発しています。これは、AndroidのCipher Classを使用して大きなファイルを復号化しています。Cipher.dofinal()のメモリ不足エラー
コード:
private byte[] decrypt_chunk(byte[] data, ByteString chunk_encryption_key) {
SecretKeySpec skeySpec = new SecretKeySpec(chunk_encryption_key.toByteArray(), 1, 16, "AES");
Cipher cipher;
byte[] decrypted = new byte[0];
try {
cipher = Cipher.getInstance("AES/CFB/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec, new IvParameterSpec(getIV(0)));
decrypted = cipher.doFinal(data);
} catch (NoSuchAlgorithmException | NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (InvalidAlgorithmParameterException e) {
e.printStackTrace();
} catch (ShortBufferException e) {
e.printStackTrace();
}
return decrypted;
}
大きなファイルを復号化しながら、私は"のOutOfMemory"エラーを取得しています。
I以下の質問があります。
現在のコードで何chanegs OOMエラーを修正することができますか?
Cipher.update()は問題を解決するのに役立ちますか?はいの場合、それを実装する方法は?
ありがとうございます。
どのようにデータを読み込みますか? –
私はオンラインサーバーからデータを読み取り、それをbyte []に格納しています。 –
ファイル全体を一度に読み込むことはできません。一度にブロックをロードする必要があります。 –