这是我计划存储在磁盘中的对象,
public class SObject {
/**
*
*/
private String value;
private int occurences;
private String key;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public int getOccurences() {
return occurences;
}
public void setOccurences(int occurences) {
this.occurences = occurences;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
}
我正在考虑创建对象列表并将该列表存储到如下所示的新类中,
public class ToDisk implements Serializable{
List<SObject> sobj;
public List<SObject> getSobj() {
return sobj;
}
public void setSobj(List<SObject> sobj) {
this.sobj = sobj;
}
}
这是以最少的代码工作量来写数据的有效方法吗?我还发现通过使用序列化从磁盘读取数据更容易。因为列表的大小可能非常大(〜10k +),所以我应该在代码易用性和大小之间找到平衡。有什么办法可以达到这种平衡?与序列化相比,是否还有其他方法可以减小数据大小,请与我联系。我不能使用任何外部库。
顺便说一句,您不需要列表包装器即可将许多项目写入文件,但是您的项目因此需要可序列化。
public class SObject {
private String value;
private int occurences;
private String key;
}
来写
List<SObject> list = new ArrayList<>();
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(fileName));
oos.writeObject(list);
oos.close();
读书
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(fileName));
List<SObject> list = (List<SObject>) ois.readObject(); // cast is needed.
ois.close()
写压缩
ObjectOutputStream oos = new ObjectOutputStream(new DeflaterOutputStream(new FileOutputStream(fileName)));
oos.writeObject(list);
oos.close();
阅读压缩
ObjectInputStream ois = new ObjectInputStream(new InflaterInputStream(new FileInputStream(fileName)));
List<SObject> list = (List<SObject>) ois.readObject(); // cast is needed.
ois.close()
这是以最少的代码工作量来写数据的有效方法吗?
您必须制作SObject implement Serializable
,仅此而已。您不能使其更短。
您可以通过使其更高效来进行工作,implement Externalizable
但这需要更多工作。
我还发现通过使用序列化从磁盘读取数据更容易。
听起来是这样做的一个很好的理由。
由于清单的大小可能非常大(〜10k +),
除非您的弦很长,否则10K对我来说听起来很小。我有一个针对我的序列化/持久性库的测试,它可以在几秒钟内写入和读取10,000,000个条目。
我应该在代码易用性和大小之间找到平衡。有什么办法可以达到这种平衡?
我怀疑轻松是您需要担心的。如果您想缩小文件大小,可以通过使用GZIP或压缩器/充气器流包装文件流来对其进行压缩。这将添加一行代码,并使文件缩小4倍。
与序列化相比,是否还有其他方法可以减小数据大小,请与我联系。我不能使用任何外部库。
它们都需要外部库。您可以使用XMLEncoder和XMLDecoder,但这会变得越来越慢。
既然我对此有疑问;如果您对我的图书馆Java Chronicle 2.x感兴趣,这是笔记本电脑上运行的测试结果。这次写了5亿个条目并在第二个线程中读取它们(正在写它们)花费了多长时间,只花了12秒钟以上。
Rate = 41.0 Mmsg/sec for 16 byte messages
该测试是多线程()中IndexedChronicleTest
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句