gpt4 book ai didi

java - 如何从android应用程序中的文本文件中读取大的json?

转载 作者:行者123 更新时间:2023-12-01 18:22:38 27 4
gpt4 key购买 nike

我的 Android 应用程序中有一个文本文件,其中包含 json.我需要读取并解析该 json。文件大小为 21 MB。我正在使用以下代码来读取文件:

 StringBuilder stringBuilder = new StringBuilder();
InputStream input = getAssets().open(filename);
int size = input.available();
byte[] buffer = new byte[size];
byte[] tempBuffer = new byte[1024];
int tempBufferIndex = 0;
for(int i=0; i<size; i++){
if(i == 0){
tempBuffer[tempBufferIndex] = buffer[i];
}else{
int mod = 1024 % i;
if(mod == 0){
input.read(tempBuffer);
stringBuilder.append(new String(tempBuffer));
tempBufferIndex = 0;
}
tempBuffer[tempBufferIndex] = buffer[i];
}
}
input.close();

实际情况下,Size int 为 20949874。循环完成后,即使我更改 for 循环的范围, stringBuilder 长度也始终为 11264 。我尝试在不使用循环的情况下从 InputStream 创建一个字符串,但它总是给我 OutOfMemoryError 异常。我还在日志中看到“将堆( fragment 情况)增长到 26.668MB,分配 20949890 字节”。我在这里搜索并尝试了不同的解决方案,但没有成功。知道我应该如何解决这个问题。提前致谢。

最佳答案

对于大 json 文件,您应该使用 SAX 解析器而不是 DOM。例如JsonReader .

DOM(“文档对象模型”)将整个内容加载到内存中,并允许开发人员按照自己的意愿查询数据。 SAX 将数据呈现为流:开发人员等待所需的数据出现并仅保存所需的部分。 DOM 被认为更易于使用,但 SAX 使用的内存要少得多。

关于java - 如何从android应用程序中的文本文件中读取大的json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27230896/

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