我正在用原生 C++ 编写一个函数,它使用 env->NewStringUTF
返回一个大字符串。问题是当字符串很大(大约 23 MB)时,我在 Java 中遇到内存不足异常。
我已经尝试过分段获取数据,但是速度很慢。
这是我的代码:
char* d = data.c_str();
jstring str = env->NewStringUTF(d);
return str;
如何将这个字符串传递给 Java?
最佳答案
你不能在内存中保留这么大的字符串。对于整个应用程序,某些 Android 设备的堆限制为 16MB。
我建议你将这个字符串保存到一个文件(或者可能在数据库中)并将文件名传递给 java。
或者也许您应该更改应用程序逻辑并继续将字符串保留在 native 空间中并仅将请求的小部分传递给 java...
附言您可以使用 GZIP 压缩字符串并多次减少它的内存占用,但您仍然无法在 java 中保留整个解压缩的字符串...
关于android - 将巨大的字符串从 native 传递到 java - 内存不足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14561669/