编写Android大文件时出现OutofMemory错误

时间:2015-09-04 12:19:03

标签: java android

我试图加密一个500MB的大文件,但我的代码会引发内存不足错误,对于50MB以下的小文件,代码运行正常。我正在使用名为JNCryptor的第三方库进行加密,如果有任何错误,请查看我的代码并纠正我。提前谢谢。

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();
}

1 个答案:

答案 0 :(得分:0)

这取决于JNCryptor如何管理内存,特别是如果它使用临时缓冲区。最好使用流而不是缓冲区。仅用于测试,如果直接将fileData写入outFile,是否会出现OutOfMemoryError?

writeFile(filedata, Outfile);