gpt4 book ai didi

java - 读取 res/raw 中的文本文件,非常慢。使用缓冲阅读器

转载 作者:行者123 更新时间:2023-11-30 02:50:50 30 4
gpt4 key购买 nike

文本文件的大小为 560 KB,大约有 24500 行。每行都添加到列表中。也许我的手机又旧又慢?手机型号:三星 GT-S5570,Android 2.3.4。阅读它大约需要 30 秒或更长时间,我很确定我的 Reader 类之外的算法不是问题。还有其他人遇到过类似问题或知道问题可能是什么吗?

        public class Reader {  

public List<String> read(String file) {
Context ctx = ApplicationContextProvider.getContext();
List<String> entries = new ArrayList<String>();

//Get res/raw text-file id.
int resId = ctx.getResources().getIdentifier(file,"raw", ctx.getPackageName());
InputStream inputStream = ctx.getResources().openRawResource(resId);

BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream), 8192);

try {
String test;
while (true) {
test = reader.readLine();

if (test == null)
break;
entries.add(test);
}
inputStream.close();
reader.close();
} catch (IOException e) {
e.printStackTrace();
}

return entries;
}
}

最佳答案

您描述的设备是一个非常旧且速度慢的设备。您应该注意通过以下方式尽可能加快阅读过程:

  • 将 ArrayList 初始化为大约预期条目的大小,以便在添加条目期间它不会多次调整自身大小。当数组增长时,这涉及多次大量操作,因为它必须在增长时再次复制所有以前的元素。
  • 一次读取整个文件,然后解析结果。

测量每个部分花费多少时间也是一个好主意 - 读取文件并将 24500 个字符串插入 ArrayList。糟糕的表现可能来自最意想不到的方向。

请尝试以下方法并分享结果(如果可能的话用时间测量):

private char[] readWholeFile(String file) {
Context ctx = ApplicationContextProvider.getContext();
int resId = ctx.getResources().getIdentifier(file, "raw", ctx.getPackageName());
InputStream inputStream = ctx.getResources().openRawResource(resId);

BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream), 8192);
try {
int length = inputStream.available();
char[] contents = new char[length];
reader.read(contents, 0, length);
return contents;
} catch (IOException e) {
e.printStackTrace();
return null;
} finally {
try {
if (reader != null) reader.close();
} catch (Exception e) {

}
}
}


public List<String> readEntries() {
final int EXPECTED_ELEMENTS = 24500;

char[] contents = readWholeFile("somefile");
if (contents == null) {
return new ArrayList<String>();
}
List<String> entries = new ArrayList<String>(EXPECTED_ELEMENTS);
String test;
BufferedReader reader = new BufferedReader(new CharArrayReader(contents));
try {
while ((test = reader.readLine()) != null) {
entries.add(test);
}
return entries;
} catch (IOException e) {
e.printStackTrace();
return new ArrayList<String>();
} finally {
try {
if (reader != null) reader.close();
} catch (Exception e) {

}
}
}

关于java - 读取 res/raw 中的文本文件,非常慢。使用缓冲阅读器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24219248/

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