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 :)
...
この方法についてどう思いますか?より効率的な方法で構造化できますか?
スペースは気にしませんが、時間は気にします (エミュレーターはファイルを読み取るのに多くの時間がかかります)