将巨大的字符串从本机传递到java - 内存不足错误

时间:2013-01-28 12:06:14

标签: android c++ string java-native-interface

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

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

这是我的代码:

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

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

1 个答案:

答案 0 :(得分:3)

你不能在记忆中保留这么大的字符串。对于整个应用程序,一些Android设备的堆限制是16MB。

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

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

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