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

标签 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?

最佳答案

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

我建议你将这个字符串保存到一个文件(或者可能在数据库中)并将文件名传递给 java。

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

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

关于android - 将巨大的字符串从 native 传递到 java - 内存不足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14561669/

相关文章:

java - 是否有更有效的方法来迭代字符串直到到达某个字符?

安卓。文本、图像和文本。使用什么 Android 小部件?

c++ - 为什么在这种情况下内联函数会花费更多时间?代码如下 :

java - 设计音频架构

c++ - 增量变量是否可在平局调用中重用?

java - 字符串:用 "("替换 "\("

java - 替换java中字符串中所有出现的子字符串

java - Android API 中的 'focus' 是什么?

android - 我如何等待 Kotlin 协程中的其他事件?

android - 单击通知以打开我的 Activity 时的 firebase 消息传递