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[]データのデータ長が約800kb程度になると、受信を続けます。

     java.lang.OutOfMemoryError

この問題を回避するためにコードを変更するにはどうすればよいですか?復号化での不完全なブロックのエラーを回避するために、base64でエンコードする必要がありました。

4

1 に答える 1

2

問題の1つは、実行しているロギングです。データを文字列に変換することで、おそらく1バイトあたり最大5文字を使用し、各文字は2バイトであるため、元の1バイトあたりのメモリ使用量は10バイトになります。次に、文字列の連結を使用しているため、必要なメモリ量が2倍になります(コピーのため)。

したがって、ロギングステートメントだけがそれぞれ約16MBを使用していると思います。800KBのアレイ全体をログに記録しておくと本当に便利ですか?

ログステートメントを削除するとどうなりますか?

于 2012-07-22T12:51:30.597 に答える