3

ネイティブC++で関数を記述しており、。を使用して大きな文字列を返しますenv->NewStringUTF。問題は、文字列が大きい場合(約23メガバイト)、Javaでメモリ不足の例外が発生することです。

すでに部分的にデータを取得しようとしましたが、非常に遅いです。

これは私のコードです:

char* d = data.c_str();
jstring str = env->NewStringUTF(d);
return str;

この文字列をJavaに渡すにはどうすればよいですか?

4

1 に答える 1

3

このような大きな文字列をメモリに保持することはできません。一部のAndroidデバイスのヒープ制限は、アプリケーション全体で16MBです。

この文字列をファイル(またはおそらくdb)に保存し、ファイル名をjavaに渡すことをお勧めします。

または、アプリケーションロジックを変更し、文字列をネイティブスペースに保持し続け、要求された小さな部分のみをJavaに渡す必要があります...

PS GZIPを使用して文字列を圧縮し、メモリフットプリントを数回削減できますが、解凍した文字列全体をJavaで保持することはできません...

于 2013-01-28T12:11:14.503 に答える