【发布时间】:2022-08-19 22:36:29
【问题描述】:
我正在尝试使用 InputStream 读取资产文件,但它抛出 OutOfMemory 异常,文件大小为 22 mb(约 2200 万字节!)
这是我使用的代码
try{
java.io.InputStream is = MainActivity.this.getAssets().open(\"file.json\");
int Si = is.available();
byte[] Bu = new byte[Si];
is.read(Bu);
is.close();
data = new String(Bu, \"UTF-8\");
}catch(Exception e){
}
-
但是为什么要将一个大文件完全放在内存中的字节缓冲区中呢?对我来说很有意义。还不够:之后,您创建了一个用于该字节缓冲区的字符串。因此它将在内存中两次。想知道你为什么这样做。
-
分成几个文件
-
好吧,即使那样也不需要。也不将字节缓冲区转换为字符串。您的意思是 22 MB。不是 22 mb。
-
您可能无法在内存中保存 22MB 的已解析 JSON。但是,如果您将
InputStream传递给您的 JSON 解析器(Moshi、Gson、Jackson 等),而不是尝试自己读取它,那么您的运气会更好。
标签: java android out-of-memory