【发布时间】:2015-03-22 06:59:49
【问题描述】:
我有一个可以处理数据列表的应用。数据分为三个类别,如下所示。我的问题是读取和写入数据到磁盘的时间太长,以至于应用程序在超过 1,000 个条目后仍然有用。一个例子是 1,000 张抽认卡。磁盘上的文件大约 200K,加载大约需要 6 秒。令人印象深刻的每秒 35k。我希望能够支持数以万计的条目,但显然用户的注意力跨度会因等待一分钟而超时。在读取数据并将其加载到位于滚动视图中的 linerlayout 和屏幕刷新之后,花费了令人惊讶的长部分时间。这大约是六秒中的三秒。我一直在寻找不同的替代方案,例如 parcelable(无法写入磁盘)Kyro 等,但基准测试并不那么令人印象深刻。如果有人能给我建议或指导,我将不胜感激。代码效果很好 - 真的很慢。下面是类的数据结构和我用来读写的代码。
谢谢,
克里斯
public class iList extends Activity implements Serializable {
String listName;
int lastPosition;
long dateSaved;
String listPath;
List<iSet> listLayout=new ArrayList<iSet>();
List<String> operationsHistory = new ArrayList<String>();
List<iSet>setList= new ArrayList<iSet>();
public class iSet extends Activity implements Serializable {
private static final long serialVersionUID = 2L;
String setName;
List<Objecti> setObjectis = new ArrayList<Objecti>();
List<iList> setLists = new ArrayList<iList>();
boolean hasList=false;
int listCount=0;
public class Objecti extends Activity implements Serializable {
private static final long serialVersionUID = 2L;
private String objectName;
private int objectType;
private String stringValue;
private Date dateValue;
private float floatValue;
private int integerValue;
private ImageView image;
public iList readList(String pathName) {
File f = new File(pathName);
iList list = new iList();
ObjectInputStream objectinputstream = null;
try {
FileInputStream fis = new FileInputStream(pathName);
if (fis.available() > 0) {
ObjectInputStream ois = new ObjectInputStream(fis);
list = (iList) ois.readObject();
ois.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (objectinputstream != null) {
}
}
return list;
}
public void save(String filePath){
try {
File f = new File(filePath);
FileOutputStream fout = new FileOutputStream(filePath);
ObjectOutputStream oos = new ObjectOutputStream(fout);
oos.writeObject(this);
oos.flush();
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
【问题讨论】:
-
感谢您的想法 Saravanan。让我给你们的cmets一些想法,看看我是否可以改进设计。如果我有什么想法,我会告诉你的。
标签: performance io serializable