1
我的Android應用程序中有一個很大的txt文件(1.5 Mb)作爲私人資源。
該文件的結構是這樣的:Android - 更高效的方法來讀取大文本文件
"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。嘗試閱讀此信息是所有.http://java.sun.com/developer/technicalArticles/Programming/PerfTuning/ – PedroAGSantos
我的第一反應是,你爲什麼這樣做?把數據放在一個sqlite數據庫。 – jasonhudgins
我無法使用sqlite數據庫,因爲數據位於遠程服務器中。和Android的訪問遠程數據庫的支持真的很糟糕...... – Oneiros