2

这是我的源代码:

public static byte[] encrypt(byte[] Data) throws Exception {
    Log.i("Debug", "initial data is" + java.util.Arrays.toString(Data));

    Key key = generateKey();
    Cipher c = Cipher.getInstance(ALGO);
    c.init(Cipher.ENCRYPT_MODE, key);
    byte[] encVal = c.doFinal(Data);

    Log.i("Debug", "encrypted data is" + java.util.Arrays.toString(encVal));
     ;
    return Base64.encode(encVal,0);
   }

当 byte[] Data 的数据长度在 800 kb 左右时,我继续接收。

     java.lang.OutOfMemoryError

你能帮我如何更改我的代码以避免这个问题吗?我不得不用base64进行编码以避免解密时块不完整的错误。

4

1 回答 1

2

一个问题是您正在做的日志记录 - 通过将数据转换为字符串,您可能每个字节最多使用 5 个字符,每个字符是 2 个字节,因此每个原始字节占用 10 个字节的内存。然后,您使用字符串连接,因此所需的内存量增加了一倍(由于复制)。

因此,我怀疑每个日志语句都占用了大约 16MB。记录一个完整的 800KB 数组对您真的有用吗?

如果删除日志语句会发生什么?

于 2012-07-22T12:51:30.597 回答