Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.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 读取大型txt文件时emulator上出现OutOfMemoryError_Java_Android - Fatal编程技术网

Java 读取大型txt文件时emulator上出现OutOfMemoryError

Java 读取大型txt文件时emulator上出现OutOfMemoryError,java,android,Java,Android,我有一个大的txt文件,其中包含超过200k行。每行1个字。 我需要加载这个文件中的所有单词,它在我的Nexus7上运行正常,但当我尝试在emulator上启动我的应用程序时,我发现了一个错误。问题出在哪里?我想确保手机用户不会有这样的错误 public static ArrayList<String> getWords(Context context) throws IOException { ArrayList<String> words = new

我有一个大的txt文件,其中包含超过200k行。每行1个字。 我需要加载这个文件中的所有单词,它在我的Nexus7上运行正常,但当我尝试在emulator上启动我的应用程序时,我发现了一个错误。问题出在哪里?我想确保手机用户不会有这样的错误

    public static ArrayList<String> getWords(Context context) throws IOException {

    ArrayList<String> words = new ArrayList<String>(300000);

    InputStream is = context.getAssets().open("words.txt");
    BufferedReader br = new BufferedReader(new InputStreamReader(is));

    String word;
    while ((word = br.readLine()) != null) {
        words.add(word.toUpperCase());
    }

    is.close();
    br.close();

    return words;
}
publicstaticarraylistgetwords(上下文上下文)抛出IOException{
ArrayList单词=新ArrayList(300000);
InputStream=context.getAssets().open(“words.txt”);
BufferedReader br=新的BufferedReader(新的InputStreamReader(is));
字符串字;
while((word=br.readLine())!=null){
words.add(word.toUpperCase());
}
is.close();
br.close();
返回单词;
}

不建议在内存中加载如此大的文件,因为您无法确定android设备上是否有可用的硬件资源


我建议您改用sqlite数据库。它不仅允许您加载数据,还便于轻松搜索和修改操作。

不建议在内存中加载如此大的文件,因为您无法确定android设备上是否有可用的硬件资源


我建议您改用sqlite数据库。它不仅允许您加载数据,还方便了轻松的搜索和修改操作。

200K对于android设备来说相对较大,因此您必须使用db

但我认为你的问题是别的。
是否增加了模拟器内存(设备ram大小)

200K对于android设备来说相对较大,因此您必须使用db

但我认为你的问题是别的。
是否增加了模拟器内存(设备ram大小)

如果你真的想让它在模拟器中工作,你可以增加RAM的大小

您可以在创建AVD映像时执行此操作(“硬件”选项中有一个“最大VM应用程序堆大小”选项)。此值的默认值为24,需要输入256或更高


这是针对特定问题的解决方案,但是您可以考虑使用DB,正如其他答案所建议的那样

如果你真的想让它在模拟器中工作,你可以增加RAM的大小

您可以在创建AVD映像时执行此操作(“硬件”选项中有一个“最大VM应用程序堆大小”选项)。此值的默认值为24,需要输入256或更高


这是针对特定问题的解决方案,但是您可以考虑使用DB,正如其他答案所建议的那样

你考虑过用数据库来代替吗?Android设备通常(非常)有限的RAM。添加堆栈跟踪会有帮助。你考虑过使用数据库吗?Android设备通常(非常)有限的RAM。添加堆栈跟踪会有一些帮助。