1

从http://docs.oracle.com/html/E24396_01/ejb3_overview_why.html获取以下给定文本

“序列化是 Java 的内置机制,用于将对象图转换为一系列字节,然后可以通过网络发送或存储在文件中。序列化非常易于使用,但也非常有限。它必须存储并一次检索整个对象图,不适合处理大量数据。如果更新信息时发生错误,它无法撤消对对象所做的更改,因此不适合对数据完整性要求严格的应用程序。多线程或者程序不能在不相互冲突的情况下同时读取和写入相同的序列化数据。它不提供查询能力。所有这些因素使得序列化对于除了最微不足道的持久性需求之外的所有需求都是无用的。

我不清楚粗体字。有人可以举一个例子来支持这一点吗?

4

1 回答 1

0

这是一个愚蠢的观点,但这篇文章试图指出序列化并没有真正内置“事务”的概念。当你写一个序列化的对象图时,你把整个东西写到一个流中,要么完全成功,要么失败,留下一个部分写入的流。同样的想法也适用于并发,两个不同的线程不能同时写入同一个流。

也就是说,您可以通过将图形写入新位置,然后在完成后将新字节交换到旧位置来“模拟”事务存储。但是,这也取决于数据的最终存放位置(存储位置的功能)。序列化本身甚至不是一种持久性策略,因为它仍然需要在某个地方存储序列化的字节。“并发”点遵循相同的论点,因为您可以写入 2 个不同的位置,然后使用底层存储的原子性保证来处理并发问题。

还有其他更好的反对使用序列化进行长期存储的论点,即随着应用程序的类随着时间的推移而发生变化,保持向后兼容性的困难。

于 2012-08-29T17:53:39.643 回答