Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在android应用程序中从文本文件中读取大型json?_Java_Android_Inputstream_Fileinputstream_Android Developer Api - Fatal编程技术网

Java 如何在android应用程序中从文本文件中读取大型json?

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

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

 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答案。