我在我的 Android 应用程序中有一个大的 txt 文件(1.5 Mb)作为私有资源。
该文件的结构如下:
"A1|A2|A3|A4#B1|B2|B3|B4#C1|C2|C3|C4#..."
其中 A1、A2、A3、B1... 是字母数字字符串。我需要为每组字符串创建一个对象,如下所示:
MyObject objA = new MyObject("A1", "A2", "A3", "A4");
MyObject objB = new MyObject("B1", "B2", "B3", "B4");
...
我开发了一个阅读器类来阅读这个文件......但它看起来有点慢。
这里是:
public class TextFileReader {
private static Charset charset = Charset.defaultCharset();
private InputStream stream;
private InputStreamReader reader;
private StringBuffer buffer;
public TextFileReader(Context c, String s) {
try {
this.stream = c.openFileInput(s);
this.reader = new InputStreamReader(this.stream, charset);
this.buffer = new StringBuffer();
} catch (FileNotFoundException e) {
}
}
public String readNextSubstring(char div) throws IOException {
buffer.delete(0, buffer.length());
int i;
char c;
while ((i = reader.read()) > -1) {
c = (char) i;
if (c == div) break;
buffer.append(c);
}
return buffer.toString();
}
}
我TextFileReader
以这种方式使用:
TextFileReader reader = new TextFileReader(context, "big_file.txt");
//First group
String group = reader.readNextSubstring('#');
String[] info = group.split("\\|");
MyObject objA = new MyObject(info[0], info[1], info[2], info[3]);
//Second group
group = reader.readNextSubstring('#');
info = group.split("\\|");
MyObject objB = new MyObject(info[0], info[1], info[2], info[3]);
//Obviously this is done in a while loop :)
...
你觉得这个方法怎么样?它可以以更有效的方式构建吗?
我不在乎空间,我在乎时间(模拟器需要很多时间才能读取文件)