gpt4 book ai didi

java - 输入流和内存不足错误

转载 作者:行者123 更新时间:2023-12-01 09:40:08 24 4
gpt4 key购买 nike

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”的大小约为。 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)

我该如何处理?怎样才能更高效地编码呢?它的运行时间没有问题,但它消耗了太多的设备内存。因此,当设备内存没有更多容量时,程序就会崩溃。

最佳答案

我注意到了这一点:

    int size = is.available();

我觉得这有点奇怪。所以我去看了the JavaDoc for InputStream.available这就是它所说的:

Note that while some implementations of InputStream will return the total number of bytes in the stream, many will not. It is never correct to use the return value of this method to allocate a buffer intended to hold all data in this stream.

所以你有两个条件之一:

  1. 您的文件大小实际上是 8MB。

    如果你真的有这么多 JSON,你需要重新考虑里面有什么以及你用它做什么。我没有看到很多开发人员使用的一个选项是 JsonReader,它允许您解析 JSON,而无需先将整个流加载到内存中。

  2. 您的文件大小远小于 8MB

    只是以不同的方式读取文件,请参阅 How do I create a Java string from the contents of a file?

关于java - 输入流和内存不足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38529295/

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