[英]reading/writing a set to a .ser file compared to a .txt file in java
所以我有了这个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文件实际上更快。 仔细研究了一下,真的找不到太多。 任何帮助将是巨大的,谢谢。
将Java序列化与“ txt”文件进行比较是不可能的,因为可以用许多不同的方式创建和读取文本文件。 例如,您可以将XML或JSON或您自己的自定义文本格式写入文本文件。 这些都有很大的不同,它们的性能和其他特征可能会有很大的不同。
Java序列化在许多情况下都可以很方便,但是也有很多限制和其他考虑因素会使事情变得非常复杂。
ArrayList
, HashSet
等)都可以序列化。 如果包含无法序列化的内容,则必须声明它为transient
并在反序列化时解决它的缺失,或者必须创建自定义序列化格式。 这增加了复杂性。 obj1
和obj2
,它们每个都有对相同对象obj3
的引用。 对该结构进行序列化和反序列化将保留此关系,因此之后obj1
和obj2
都指向同一obj3
实例。 其他序列化机制可能无法做到这一点,最终您会得到一些指向obj3
副本的obj3
。 serialVersionUID
,但是例如,如果添加或删除了序列化的字段,则可能必须处理此类的演变。 同样,这增加了复杂性。 至于性能,建议您尝试一下,看看它的性能是否可以接受。 它可能比替代方案更快或更慢,但是您实际上必须实现这些替代方案并对其进行基准测试,并将结果与Java序列化进行比较。
我假设您正在问序列化和文件IO之间的区别,以将对象状态写入文件。
串行化的主要用途是像RMI中一样通过网络将对象状态发送到另一个VM。 在生产代码中很少使用序列化将对象状态写入文件。
如果使用文件IO将对象状态写入文件,则必须手动注意将所有字段(包括瞬态字段)写入文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.