【发布时间】:2016-11-26 12:36:52
【问题描述】:
public String loadJSONFromAsset(String path) {
String json = null;
try {
InputStream is = this.getAssets().open(path);
int size = is.available();
Log.d("Size: ", "" +size);
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
json = new String(buffer, "UTF-8");
} catch (IOException ex) {
ex.printStackTrace();
}
return json;
}
这是将文件转换为 JSON 数据文件的代码。它从字面上工作,它创建 JSON 文件,但“is”的大小是 appr。 8MB
D/Size:: 7827533
并且OutOfMemory 错误发生在大多数设备上,例如
java.lang.OutOfMemoryError
at java.lang.String.<init>(String.java:255)
at java.lang.String.<init>(String.java:228)
at com.example.fkn.projecttr.List.loadJSONFromAsset(List.java:255)
我该如何处理?如何编码更有效?它运行时间没有问题,但它在设备上消耗了太大的内存。因此,当设备内存没有更多容量时,程序就会崩溃。
【问题讨论】:
-
与您的问题无关,但不要在
catch块中使用return。 -
感谢您的建议!
-
由于您在此处执行的操作,这可能不会发生:在其他代码中创建的对象可能会占用您的大部分可用内存。
-
在AndroidManifest应用标签中添加android:largeHeap="true"
-
@bradimus 是因为样式原因还是从 catch 块返回有一些风险?
标签: java android json out-of-memory inputstream