最近我通过序列化看到并听到了一个新概念(至少对我来说)。我看到的是我们有一个用于Hibernate的DAO类与DB通信,该类和所有实现Serialization。我已经要求开发人员说我们在传输对象时需要进行序列化。他告诉我在多线程环境中,我们需要实现接口或序列化。但我不相信他的判断。
我们是后端应用程序,我们正在为前端提供Web服务。所以我们正在面对前端课程,商务课程和DAO课程。在哪个区域使用此序列化。
开发人员在多线程和序列化方面是否正确?
答案 0 :(得分:1)
您必须实施Serializable
才能将对象转换为bitStream,无论您使用它做什么。
唯一的事情,你必须在多线程环境中考虑,ObjectStream
在写入对象时没有锁定。因此,如果您的对象状态将由多个线程同时修改。锁定和写入安全是应用程序的责任。
此SO提供了有关此内容的更多信息。
"He told me in a multithreaded environment, either we need to implement interface or serialization"
您对实施interface
的意思是什么?任何界面?还是proxies
?
对于DAO层。根据JPA规范
If an entity instance is to be passed by value as a detached object (e.g., through a remote interface), the
entity class must implement the Serializable interface
所以JPA不强迫你做Serializable
,除非你想序列化外部(比如远程发送对象/写入文件等)。但是实现Serializable
没什么坏处,因为它只是标记界面。恕我直言在实体类中实现总是好的做法
答案 1 :(得分:0)
通过讲述多线程和序列化,我不知道他的意思。这是两个不同的概念。你有什么问题?
http://docs.oracle.com/javase/tutorial/jndi/objects/serial.html
序列化仅用于保存/恢复对象的状态以通过线路传输或从光盘保存/恢复等。例如,它用于RMI(远程过程调用)。
答案 2 :(得分:0)
每次需要获取对象时都会使用序列化,并将其转换为序列化形式,因此可以将其存储起来供以后使用(如保存文档),或者传输和使用一个不同的JVM。
序列化通常仅在分布式计算环境中使用时才会对并发性产生影响,在分布式计算环境中,不同的JVM实例可能会处理同一问题并需要交换信息。
这些都不是你需要长时间担心的事情。