在http://docs.oracle.com/html/E24396_01/ejb3_overview_why.html
的指定文字下方提取“序列化是Java的内置机制,用于将对象图转换为一系列字节,然后可以通过网络发送或存储在文件中。序列化非常容易使用,但也非常有限。它必须立即存储和检索整个对象图,使其不适合处理大量数据。如果在更新信息时发生错误,则无法撤消对对象所做的更改,使其不适合需要的应用程序严格的数据完整性。多个线程或程序不能同时读取和写入相同的序列化数据而不会相互冲突。它不提供任何查询功能。所有这些因素使得序列化对除了最琐碎的持久性需求以外的所有内容都无用。“ / p>
我不清楚粗体文字。有人可以引用一个例子来支持这个吗?
答案 0 :(得分:0)
这是一个愚蠢的观点,但该段落试图指出序列化并没有真正具有内置于其中的“交易”的概念。当你编写一个序列化的对象图时,你将整个事物写入一个完全成功或失败的流,让你留下一个部分写入的流。同样的想法同样适用于并发,两个不同的线程不能同时写入同一个流。
说,你可以通过将图形写入新位置然后在完成后将新字节交换到旧位置来“模拟”事务存储。但是,这也取决于数据的最终安放位置(存储位置的功能)。序列化本身并不是一种持久性策略,因为它仍然需要某处存储序列化字节。 “并发”点后面的参数相同,因为您可以写入2个不同的位置,然后使用底层存储的原子性保证来处理并发问题。
还有其他更好的论据反对使用长期存储的序列化,即随着应用程序的类随着时间的推移而变异,保持向后兼容性的困难。