serialization 允许你将实现了Serializable接口的对象转换为字节序列,这些字节序列可以被完全存储以备以后重新生成原来的对象。serialization 不但可以在本机做,而且可以经由网络操作。这个好处是很大的----因为它自动屏蔽了操作系统的差异,字节顺序等。比如,在 Window平台生成一个对象并序列化之,然后通过网络传到一台Unix机器上,然后可以在这台Unix机器上正确地重构这个对象。 Object serialization主要用来支持2种主要的特性: 1.Java的RMI(remote method invocation).RMI允许象在本机上一样操作远程机器上的对象。当发送消息给远程对象时,就需要用到serializaiton机制来发送参数和接收返回直。 2.Java的JavaBeans. Bean的状态信息通常是在设计时配置的。Bean的状态信息必须被存起来,以便当程序运行时能恢复这些状态信息。这也需要serializaiton机制。
举个例子,你编写了一款游戏,保存记录时把所有状态一一保存非常麻烦,这时就可以使用Serializable(序列化接口),它的作用是可以将一个对象实例序列化,序列化后你可以选择将它保存在你需要的位置。
相对的,读取后生成的对象所有属性(除了设置为瞬时值的属性)将和原对象的属性相同(只是内存地址不同)。
这样可以方便的将一个java对象写入到磁盘中,保存该对象的所有状态!
值得注意的是序列化的对象中包含的属性和其他对象都需要实现序列化接口,不然无法正常序列化!
在hibernate里,并非所有的实体类必须实现序列化接口,因为在hibernate中我们通常是将基本类型的数值映射为数据库中的字段。而基础类型都实现了序列化接口(String也实现了)。
所以,只有在想将一个对象完整存进数据库(存储为二进制码),而不是将对象的属性分别存进数据库,读取时再重新构建的话,就可以不用实现序列化接口。
分享到:
相关推荐
public class Person implements Serializable { private String name = null; transient private Integer age = null; // 不会被序列化的字段 private Gender gender = null; // ... } ``` 如果执行序列化操作...
public class Employee implements Serializable { // 字段和方法 } ``` - **`@Table`**: 可用于进一步定制实体对应的数据库表的名字和其他属性。默认情况下,实体类的名字会被用来命名数据库表,但可以通过 `@...
public class Employee implements Serializable { // 类定义 } ``` 2. **`@Table`**:此批注用于定制实体映射到数据库表的细节,比如表名等。 ```java @Entity @Table(name = "EMPLOYEES") public class ...
public class Employee implements Serializable { // 类体 } ``` ##### 2. `@Table` - **用途**:指定实体类对应的数据库表的名字以及其他相关信息。 - **属性**: - `name`:指定数据库表的名称。 - `...
public class Employee implements Serializable { // 类成员 } ``` ##### 2. @Table - **作用**:用于指定实体映射到数据库中的表名,以及表的一些其他属性。 - **示例**: ```java @Entity @Table(name = ...
public class Employee implements Serializable { private static final long serialVersionUID = 1L; @Id private Long id; private String name; // 其他属性和方法... } ``` - **注意事项**:每个被标记...
在Java类定义中,只需添加`implements Serializable`即可实现序列化。例如: ```java public class MyClass implements Serializable { private int id; private String name; // ... } ``` **序列化标识符:...
public class Employee implements Serializable { // ... } ``` ##### 2. @Table - **作用**:指定实体类对应的数据库表名称及额外的表级约束。 - **属性**: - `name`:数据库表的名称。 - `schema`:指定...
public class Flight implements Serializable { // 实体类的其他属性和方法 } ``` ##### 2. @Id - **用途**:用于标记实体类中的主键属性。 - **示例**: ```java @Entity public class Flight implements ...
public class MySerializable implements Serializable { private String name; private int age; // 构造函数,getter和setter方法 // ... } ``` `Product`类可能包含产品相关的属性,如: ```java public ...
public class User implements Serializable { private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } // Getter 和 Setter 方法 } ``` **...
在Java中,实现序列化非常简单,只需要在类声明中添加`implements Serializable`。例如: ```java public class TestSerializable implements Serializable { private String name; private int age; // ...
public class MySerializableClass implements Serializable { private String field1; private int field2; // getters and setters } ``` 现在,如果我们有一个`MySerializableClass`的实例`obj`,并希望将其...
1. 在需要序列化的类上添加`implements Serializable`:这样,Java会自动生成序列化所需的元数据,如serialVersionUID。 2. 注意嵌套类:如果类中包含其他可序列化的类,这些类也会被序列化。对于嵌套的非序列化类...
public class MySerializable implements Serializable { // 省略属性和构造函数 } // 传递和接收Serializable对象 MySerializable serializableObj = new MySerializable(); bundle.putSerializable(...
- 实现简单,只需要在类上添加`implements Serializable`即可。 - 序列化后的数据可以跨平台传输。 缺点: - 性能较低,因为Serializable使用了反射机制,序列化和反序列化过程较慢。 - 会产生大量的临时对象,占用...
public class User implements Serializable { private static final long serialVersionUID = 1L; private String userId; private String userName; public User(String userId, String userName) { this....
public class MyClass implements Serializable { // class members } ``` **2. 序列化过程** - **写入对象**:使用`ObjectOutputStream`类的`writeObject()`方法将对象写入到输出流中,这将调用对象的`...
public class MyClass implements Serializable { // 类的成员变量和其他代码 } ``` 实现 `Serializable` 接口后,可以通过 `java.io.ObjectOutputStream` 将对象写入文件或通过网络传输,也可以使用 `java.io....