什么是Serializable?这是什么意思?

13

可能有重复问题:
Hibernate表类需要实现Serializable接口吗?
Serializable是什么意思?

public class ExampleEntity implements Serializable
{
     @Id
     private long id;
     private int fieldInt;
     private long fieldLong;
     private String fieldString;
 }

我正在寻找JPA教程。我能够理解基本概念,但在所有教程中,它们都添加了Serializable。这有什么目的?这如何帮助我? 请问有什么建议吗?


这要么是 Do Hibernate table classes need to be Serializable? 的重复问题,要么就是一个与 Hibernate/JPA 无关的问题,那就是 What is object serialization? 的重复问题。在两种情况下,都是重复的 :) - Pascal Thivent
我编辑了标签。删除了 “jpa” 和 “hibernate”,并添加了 “serialization”。 - pakore
@pascal:抱歉,我是个新手。我正在学习中,以后一定会避免这种情况的。 - IamIronMAN
@Code 哦,不用担心,没问题。只是答案已经在那里了,在这种情况下,惯例是关闭问题(作为重复问题),以避免信息的稀释。但首先进行一些搜索是个好主意 :) - Pascal Thivent
@pascal 谢谢您的关心,您说得对。你们都帮助我们成长。感谢。 - IamIronMAN
添加另一个更明显的重复:Serializable是什么意思? - Pascal Thivent
2个回答

26

这意味着该类可以被序列化。这意味着它可以被转换成一串0和1的流并发送到其他服务,例如web服务或ORM(hibernate)或其他服务。然后该服务知道如何保存该流。

此外,您的程序可以接收序列化的类并从0和1的流中为其创建一个实例。

这是在任何其他时间“保存”类实例并“恢复”它们的方法。

更多信息请见

要使一个类可序列化,必须实现“Serializable”接口。

  • 为什么要这样做?因为当需要序列化一个类时,将调用writeObject函数将对象转换为字节。另一方面,当您拥有字节并希望获得类的实例时,将调用函数readObject

  • 为什么不是自动的?变量值已经由字节表示了。因为问题出现在例如类持有其他类的实例时。你该怎么办?也序列化其他类吗?还是只保留引用地址?这非常复杂,可能取决于您的项目类型和设计。


@pokore 谢谢,我理解得很好。还有这个 @GeneratedValue(strategy=GenerationType.AUTO) 是什么意思?是用于自动递增ID吗? - IamIronMAN
1
@weed :-) 这是一个完全不同的问题。 - Sean Patrick Floyd
1
进一步澄清,接口的目的是标记可以合理序列化的类。例如,将活动网络套接字序列化没有意义,因此未标记为可序列化。 - Matti Virkkunen
1
@代码'n'大麻。这是一个不同的问题,但我仍然会回答它。通过该注释,您告诉您的JPA实体(通常是Hibernate)自动生成ID。例如,在创建Image.class类的实例时非常有用。但在其他情况下,您可能希望自己生成ID,例如在User.class中,其中ID可以是用户名。 - pakore
1
@Code 'N'Weed,我向你推荐Christian Bauer和Gaving King所著的书籍《Java Persistence with Hibernate》,被许多人认为是Hibernate的圣经。 - pakore
显示剩余3条评论

1

可序列化的类可以被序列化 - 转换为字节以便存储在硬盘上或通过网络传输。


你所说的“bytes”是指例如XML文件吗? - variable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接