Java 如何在android应用程序中从文本文件中读取大型json?
我的android应用程序中有一个文本文件,包含一个json。我需要读取并解析json。文件大小为21MB。我正在使用以下代码读取文件:Java 如何在android应用程序中从文本文件中读取大型json?,java,android,inputstream,fileinputstream,android-developer-api,Java,Android,Inputstream,Fileinputstream,Android Developer Api,我的android应用程序中有一个文本文件,包含一个json。我需要读取并解析json。文件大小为21MB。我正在使用以下代码读取文件: StringBuilder stringBuilder = new StringBuilder(); InputStream input = getAssets().open(filename); int size = input.available(); byte[] buffer = new byte[size]; byte[] tempBuff
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();
StringBuilder StringBuilder=新建StringBuilder();
InputStream input=getAssets().open(文件名);
int size=input.available();
字节[]缓冲区=新字节[大小];
字节[]临时缓冲区=新字节[1024];
int tempBufferIndex=0;
对于(inti=0;i对于大型json文件,您应该使用SAX解析器,而不是DOM
DOM(“文档对象模型”)将整个内容加载到内存中,并允许开发人员根据自己的意愿查询数据。SAX以流的形式显示数据:开发人员等待所需的数据片段出现,并只保存所需的部分。DOM被认为更易于使用,但SAX使用的内存要少得多。对于大型json文件,您应该使用se SAX解析器而不是DOM
DOM(“文档对象模型”)将整个内容加载到内存中,并允许开发人员根据自己的意愿查询数据。SAX以流的形式显示数据:开发人员等待所需的数据片段出现,并仅保存所需的部分。DOM被认为更易于使用,但SAX使用的内存要少得多。您可以尝试在它包括几个部分。
因此,在处理应用程序的过程中,希望不会出现内存不足的情况
您还应该考虑在清单中使用“LaGeHEAP”标志
(见附件)
我不知道您的文件,但如果您使用较小的JSON标记,也可以减少存储。您可以尝试将文件拆分为几个部分。
因此,在处理应用程序的过程中,希望不会出现内存不足的情况
您还应该考虑在清单中使用“LaGeHEAP”标志
(见附件)
我不知道您的文件,但如果您使用较小的JSON标记,可能还可以减少存储。我可以建议使用gsoni,如果您认为您已经超过了应用程序专用的堆大小,请检查下面的Suvitruf答案。我可以建议使用gsoni,如果您已经超过了应用程序专用的堆大小,请检查下面的Suvitruf答案。