序列化是什么:序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得。
序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重 构对象。对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据。恢复数据要求有恢复数据的对象实例序列化的什么特点:如果某个类能够被序列 化,其子类也可以被序列化。声明为static和transient类型的成员数据不能被序列化。因为static代表类的状态, transient代表对象的临时数据。
简单来说,Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。
在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,
如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。
当实现java.io.Serializable接口的实体(类)没有显式地定义一个名为serialVersionUID,
类型为long的变量时,Java序列化机制会根据编译的class自动生成一个serialVersionUID作序列化版本比较用,
这种情况下,只有同一次编译生成的class才会生成相同的serialVersionUID 。
package com.test;
import java.io.Serializable;
public class Test1 implements Serializable {
private String name = "my name is a";
private Test2 b = null;
Test1 () {
b = new Test2 ();
}
public Test2 getB() {
return b;
}
public void setB(Test2 b) {
this.b = b;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String show() {
return "a.toString <a.name=\"" + this.name + "\" a.b.name=\""
+ this.b.getName() + "\">" + "\na=" + this.toString() + " b="
+ this.b.toString();
}
}
public class Test2 implements Serializable{
private String name = "my name is Test2";
Test2 () {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
这样就可以写读数据了
但如果test1、test2有一个没有实现Serializable接口的话,就会出现java.io.NotSerializableException:
分享到:
相关推荐
java.lang.Throwable (implements java.io.Serializable) java.lang.Exception java.lang.RuntimeException com.opensymphony.xwork2.XWorkException (implements com.opensymphony.xwork2.util.location.Locatable...
java.util.HashMap,V> (implements java.lang.Cloneable, java.util.Map,V>, java.io.Serializable) java.util.LinkedHashMap,V> (implements java.util.Map,V>) org.springframework.core.annotation....
24. `java.io.Serializable`:Serializable接口用于对象序列化,允许对象的状态被保存和恢复。 25. `java.util.LinkedList`:LinkedList是双向链表实现的List,适合频繁插入和删除操作。 26. `java.text....
3. `java.io`包:包含用于输入/输出操作的类和接口,如`File`用于文件操作,`InputStream`和`OutputStream`代表数据流,`BufferedReader`和`PrintWriter`用于文本读写,以及`Serializable`接口用于对象序列化。...
- `java.io.Serializable` 通常用于存储复杂对象,映射为 `VARBINARY`、`BLOB` - `java.sql.Clob` 对应于 SQL 的 `CLOB` - `java.sql.Blob` 对应于 SQL 的 `BLOB` - `java.lang.Class` 映射为 `VARCHAR`,存储类...
例如,`java.util.Comparator`接口用于比较对象,而`java.io.Serializable`接口则表示类可以被序列化。 4. **枚举(Enum)**:Java允许定义枚举类型,这是一种特殊的类,可以有预定义的实例。比如`java.util....
1. `java.io.Serializable`: 使类的对象能够进行序列化,用于持久化数据或在网络中传输。 2. `java.lang.Cloneable`: 标记接口,表示对象可以被克隆。 3. `java.lang.Runnable`: 实现此接口的类可以作为线程执行的...
13. **Java.io**: I/O流处理,包括FileInputStream、OutputStream和Serializable接口,用于文件读写和数据流操作。 14. **Java.lang**: 基础类库,包括Object、String、System和Exception等核心类,是所有Java类的...
java.io.Serializable, java.lang.Cloneable, java.util.EventListener, nc.vo.gl.vouchervaluechange.ValueChangeListener, nc.vo.glpub.IVoAccess -----------------------------------------------------------...
- **二进制类型**:`byte[]` 通常映射到 `BINARY`、`VARBINARY` 或 `BLOB`,`java.lang.String` 可以映射到 `TEXT` 或 `CLOB`,`java.io.Serializable` 对象可以存储为 `VARBINARY`、`BLOB`,`java.sql.Clob` 和 `...
接口如`java.io.Serializable`和`java.lang.Runnable`则定义了特定的行为规范。 3. **异常处理** 异常处理是Java程序设计的关键部分。在JDK6中,异常通过`try-catch-finally`语句块进行捕获和处理。常见的异常类如...
1. **包(Package)**:Java的包是一种组织类的方式,它将相关的类和接口聚集在一起,例如`java.lang`、`java.util`、`java.io`等。`java.lang`包是所有Java程序的基础,包含了一些基本类型和对象的类,如`String`、...
例如,`java.io.Serializable`接口表示一个对象可以被序列化,即将对象的状态转换为字节流,便于存储或在网络中传输。而`java.lang.Runnable`接口则是多线程编程的基础,实现该接口的类可以通过`Thread`类的构造函数...
例如,`java.io.Serializable`接口表示对象可序列化。 4. **枚举(Enum)**: 枚举类型是一种特殊的类,用于定义有限的、预定义的值集合。例如,`java.util.concurrent.TimeUnit`枚举定义了时间单位。 5. **注解...
3. **输入/输出**:`java.io`包包含流式I/O操作,如`FileInputStream`和`FileOutputStream`用于文件读写,`BufferedReader`和`PrintWriter`用于文本处理,以及`Serializable`接口支持对象的序列化和反序列化。...
3.6.12 java.io .Serializable Permission 39 3.6.13 java.security.Security Permission 39 3.6.14 java.security.AllPermission 40 3.6.15 许可权隐含中的隐含 40 3.7 分配许可权 41 3.8 Protection Domain 42 ...
新的I/O包,提供了非阻塞I/O和通道(Channels)的概念,性能上优于传统的`java.io`,适用于高并发场景。 5. **java.awt**和**javax.swing**: 这两个包用于创建图形用户界面(GUI)。`java.awt`包含了基本的组件...
12. **序列化**:`java.io.Serializable`接口标记一个类可以被序列化,`ObjectOutputStream`和`ObjectInputStream`用于对象的序列化和反序列化。 13. **Lambda表达式**:Java 8引入的Lambda表达式简化了函数式编程...
- 数据序列化和反序列化,如`java.io.Serializable`接口的实现。 然而,反射机制也存在性能开销和安全风险。由于反射可以绕过编译时的类型检查,可能导致类型不匹配和安全漏洞。因此,在使用反射时应谨慎,避免不必...
3.6.12 java.io .Serializable Permission 39 3.6.13 java.security.Security Permission 39 3.6.14 java.security.AllPermission 40 3.6.15 许可权隐含中的隐含 40 3.7 分配许可权 41 3.8 Protection Domain 42 ...