【发布时间】:2012-06-05 15:33:05
【问题描述】:
我的 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 :)
...
你觉得这个方法怎么样?能否以更有效的方式进行结构化?
我不在乎空间,我在乎时间(模拟器需要很多时间才能读取文件)
【问题讨论】:
-
为什么不重组文件以使用 json ?已经制作好了,而且速度非常快。无论如何,一个不错的方法是使用 BuffedReader。尝试阅读此信息。java.sun.com/developer/technicalArticles/Programming/PerfTuning
-
我的第一反应是,你为什么要这样做?将数据放入 sqlite 数据库中。
-
我不能使用 sqlite 数据库,因为数据在远程服务器中。而且android对访问远程数据库的支持真的很烂……