2015-09-04 103 views
1

我试图加密一个大文件,它是500MB,但是我的代码引发了内存不足错误,对于小于50MB的小文件,代码工作正常。我使用名为JNCryptor的第三方库进行加密,请查看我的代码并纠正我是否有任何错误。提前致谢。编写大文件时OutofMemory错误Android

public void encrypt() { 
    String file = Environment.getExternalStorageDirectory() + "/sai/ravi_enc.exe"; 
    byte[] filedata = null; 
    try { 
     filedata = IOUtils.toByteArray(new FileInputStream(file)); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    JNCryptor cryptor = new AES256JNCryptor(); 
    String password = "123456789"; 

    try { 
     byte[] ciphertext = cryptor.decryptData(filedata, password.toCharArray()); 
     String Outfile = Environment.getExternalStorageDirectory() + "/sai/ravi_dec.exe"; 
     writeFile(ciphertext, Outfile); 
     System.out.println("Done"); 
    } catch (CryptorException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

public void writeFile(byte[] data, String fileName) throws IOException { 
    FileOutputStream out = new FileOutputStream(fileName); 
    out.write(data); 
    out.close(); 
} 
+2

代替在密文中获取完整内容,逐个读取文件并追加到目标文件 – KOTIOS

+2

@sweeper不! CodeReview不是一个错误检查服务 – Kaz

+0

这个库(我不知道,我不使用)在api公共类中有一种输入/输出流,但没有看到这样的使用是可能的。像未完成的工作? –

回答

0

这是由JNCryptor来管理内存,特别是如果它使用临时缓冲区。最好在流而不是缓冲区上工作。仅用于测试,如果直接将fileData写入OutFile,是否会发生OutOfMemoryError?

writeFile(filedata, Outfile);