gpt4 book ai didi

android - 使用 ByteArrayOutputStream 使用流式 GSON 获取 JSON 字符串获取 OutOfMemoryError

转载 作者:行者123 更新时间:2023-11-30 05:08:31 26 4
gpt4 key购买 nike

这是我的代码:

@Nullable
private static String streamBlaModelsIntoJsonString(List<BlaModel> blaModels) {
try {
Gson gson = new Gson();
ByteArrayOutputStream out = new ByteArrayOutputStream();
JsonWriter writer = new JsonWriter(new OutputStreamWriter(out, "UTF-8"));
writer.setIndent(" ");
writer.beginArray();
for (BlaModel blaModel : blaModels) {
gson.toJson(blaModel, BlaModel.class, writer);
}
writer.endArray();
writer.close();

return out.toString("UTF-8");
} catch (IOException e) {
e.printStackTrace();
}

return null;
}

这是 Fabric 的崩溃报告:

Fatal Exception: java.lang.OutOfMemoryError: Failed to allocate a 1219838 byte allocation with 265632 free bytes and 255KB until OOM
at java.lang.StringFactory.newStringFromBytes(StringFactory.java:176)
at java.lang.StringFactory.newStringFromBytes(StringFactory.java:59)
at java.io.ByteArrayOutputStream.toString(ByteArrayOutputStream.java:232)
at com.example.magnificentapp.util.SharedPrefsUtils.streamBlaModelsIntoJsonString(SharedPrefsUtils.java:230)
at com.example.magnificentapp.util.SharedPrefsUtils.saveBlaList(SharedPrefsUtils.java:207)
at com.example.magnificentapp.BlaListActivity.goToDetail(BlaListActivity.java:462)
at com.example.magnificentapp.presentation.view.activity.BlaListActivity.onItemClick(BlaListActivity.java:605)
at com.example.magnificentapp.adapter.viewholder.BlaViewHolder$2.onClick(BlaViewHolder.kt:34)
at android.view.View.performClick(View.java:6261)
at android.view.View$PerformClick.run(View.java:23748)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6776)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)

崩溃发生在 return out.toString("UTF-8"); 行。编写此代码是为了修复我的应用程序中的 OutOfMemory 崩溃,但我仍然收到比以前更多的错误。

我试着一个一个地流式传输 BlaModels 并追加一个 StringBuilder,但它似乎消耗了更多内存。

我无法重现崩溃,但此崩溃报告是我的 Fabric 中所有崩溃中的旗舰。

我的代码需要更多改进,但我正在尽力而为。总得有人来解决这个问题。

问候。

最佳答案

你需要关闭 ByteArrayOutputStream 在你完成 out 实例之后试试这个

if (out != null) {
try {
out.close();
} catch (Exception ex) {

}
}

关于android - 使用 ByteArrayOutputStream 使用流式 GSON 获取 JSON 字符串获取 OutOfMemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54109268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com