所以我有这个Java程序,目前它序列化我的set对象并将其保存到.ser文件
FileOutputStream fileOut = new FileOutputStream("hash.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(mySet);
out.close();
fileOut.close();
System.out.printf("Serialized data is saved in hash.ser");
程序每次在程序开始时也会从.ser文件中读取。我只是好奇是否有人可以解释速度的差异,以及它在从txt文件读取/加载与.ser文件之间的一般工作方式。因为我不是100%确定它实际上比我更快地读取/写入.ser文件。看了一下,真的找不到这个。任何帮助都会很棒,谢谢。
答案 0 :(得分:1)
将Java序列化与" txt"进行比较是不可能的。文件,因为可以以任何数量的不同方式创建和读取文本文件。例如,您可以将XML或JSON或您自己的自定义文本格式写入文本文件。这些都是完全不同的,并且可能在性能和其他特征方面有很大差异。
Java序列化在很多情况下都很方便,但是还有很多限制和其他注意事项可以使事情很快变得复杂。
ArrayList
,HashSet
等)都是可序列化的。如果您包含不可序列化的内容,则必须声明它transient
并在反序列化时处理它的缺失,或者您必须创建自定义序列化格式。这增加了复杂性。obj1
和obj2
,每个集合都引用了同一个对象obj3
。序列化和反序列化此结构将保留此关系,因此obj1
和obj2
之后将指向相同的obj3
实例。其他序列化机制可能不会这样做,并且您最终会得到一些指向obj3
副本的对象。serialVersionUID
,但是您可能必须处理此类的演变,例如,如果添加或删除序列化字段。同样,这增加了复杂性。至于表现,我建议您尝试一下,看看它是否表现得令人满意。它可能比替代方案更快或更慢,但您真的必须实现这些替代方案并对其进行基准测试,并将结果与Java序列化进行比较。
答案 1 :(得分:0)
我假设您要求序列化和文件IO之间的区别是将对象状态写入文件。
Serialization的主要用途是通过网络将对象状态发送到另一个VM,就像在RMI中一样。 使用序列化将对象状态写入文件很少在生产代码中使用。
如果使用文件IO将对象状态写入文件,则必须手动将所有字段写入文件,包括瞬态字段。