当我的应用程序启动时,我需要从xml页面加载大约500个对象,如下所示:
<object>
<name>objectname</name>
<info>info</info>
<info2>info</info2>
<info3>info</info3>
<info4>info</info4>
<alias>false</alias>
</object>
现在我想将它存储在设备上,希望读数会更快。目前我使用ObjectOutputStream
来编写对象。
private static void write(ArrayList<MyObject> objects, String fileName, Context context) {
final File cacheDir = context.getCacheDir();
final File objectsFile = new File(cacheDir.getAbsoluteFile() + File.separator + fileName);
FileOutputStream fos = null;
ObjectOutputStream oos = null;
boolean keep = true;
try {
fos = new FileOutputStream(objectsFile);
oos = new ObjectOutputStream(fos);
oos.writeObject(objects);
} catch (Exception e) {
e.printStackTrace();
keep = false;
} finally {
try {
if (oos != null)
oos.close();
if (fos != null)
fos.close();
if (keep == false)
objectsFile.delete();
} catch (Exception e) {
}
}
}
这不是一个非常快速的解决方案,阅读可能需要大约10-15秒。我在列表视图中显示对象,因此需要立即读取所有对象。
有什么想法吗?
答案 0 :(得分:2)
我认为存储此类数据的最佳方法是在数据库中(see here)。
解析一次并将信息存储在数据库中(每个属性一列)。从数据库中检索500条记录应该非常快:)
答案 1 :(得分:0)
我假设您不希望每次运行应用程序时都解析XML。我建议使用DataOutputStream并进行自己的编码/解码。它会比ObjectOutputStream快得多。您可以通过写入对象数量的计数来启动文件,因为这样可以更轻松地读取所有内容。
private static void write(ArrayList<MyObject> objects /* , other args */ ) {
// ...
try {
dos = new DataOutputStream(new FileOutputStream(objectsFile));
dos.writeInt(objects.size());
for (MyObject object : objects) {
dos.writeUTF(object.info);
dos.writeUTF(object.info2);
dos.writeUTF(object.info3);
dos.writeUTF(object.info4);
dos.writeBoolean(object.alias);
}
dos.flush();
} catch (Exception e) {
e.printStackTrace();
keep = false;
} finally {
try {
if (dos != null)
dos.close();
if (keep == false)
objectsFile.delete();
} catch (Exception e) {
}
}
}
对于阅读,只需使用DataInputStream遵循相同的模式:
ArrayList<MyObject> read( /* args */ ) {
// ...
ArrayList<MyObject> objects = new ArrayList<MyObject>();
int n = dis.readInt();
while (n-- > 0) {
MyObject object = new MyObject();
object.info = dis.readUTF();
// etc.
objects.add(object);
}
return objects;
}