3

我正在用本机 C++ 编写一个函数,它使用env->NewStringUTF. 问题是当字符串很大(大约 23 MB)时,我会在 Java 中遇到内存不足的异常。

我已经尝试过部分获取数据,但是速度很慢。

这是我的代码:

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

如何将此字符串传递给Java?

4

1 回答 1

3

你不能在内存中保留这么大的字符串。某些 android 设备上的堆限制为整个应用程序的 16MB。

我建议您将此字符串保存到文件(或者可能在 db 中)并将文件名传递给 java.util.

或者,也许您应该更改应用程序逻辑并继续将字符串保留在本机空间中,并仅将请求的小部分传递给 java...

PS您可以使用GZIP压缩字符串并多次减少它的内存占用,但是您仍然无法在java中保留整个解压缩的字符串...

于 2013-01-28T12:11:14.503 回答