Я использую этот метод для шифрования видеофайла:
public static void encryptToBinaryFile(String password, byte[] bytes, File file) throws EncrypterException {
try {
final byte[] rawKey = getRawKey(password.getBytes());
final FileOutputStream ostream = new FileOutputStream(file, false);
ostream.write(encrypt(rawKey, bytes));
ostream.flush();
ostream.close();
} catch (IOException e) {
throw new EncrypterException(e);
}
}
private static byte[] encrypt(byte[] raw, byte[] clear) throws EncrypterException {
try {
final SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
final Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
return cipher.doFinal(clear);
} catch (Exception e) {
throw new EncrypterException(e);
}
}
Но он выдает ошибку Outofmemoryerror, говорящую об отклонении выделения элемента 301023321.
1. Подходит ли метод, который я использую, для таких больших файлов?
2. Если да, то почему я получаю эту ошибку? Какое решение?
3. Если нет, пожалуйста, предложите какой-нибудь хороший метод для этого?