java Serializable 接口
来源:互联网 发布:javascript input赋值 编辑:程序博客网 时间:2024/06/05 20:48
- 对象序列化:把对象转换为 字节序列
- 对象反序列化:把字节序列转换为 对象
- 序列化目的:便于存储,便于传输,
- 对象序列化 前提条件:对象所属的类实现 Serializable接口, 实现 Serializable接口,仅仅是可序列化标志
- transient关键字 作用:transient关键字修饰的属性,在序列化时其值将被忽略, 具体示例如测试方法
- transient关键字 使用场景:对象序列化后得到的字节序列往往比较大,有时我们在对对象序列化时可以忽略一些不必要的属性,这时就可以用transient关键字
- serialVersionUID: 表明类的版本,在运行时判断类的 serialVersionUID来验证版本一致性,
在进行反序列化时,JVM会从字节序列中获取 serialVersonUID,然后与本地类中的serialVersionUID比较,如果一致,则反序列化;否则抛出序列化版本不一致异常。
最好显示的申明 serialVersionUID,java是跨平台的,不同平台生成的默认serialVersionUID 可能不一致 - OOS 实现对象序列化
OIS 实现对象反序列化
具体示例代码如下:
package se;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import org.junit.Test;public class TestSerializable { /** * 1. 对象序列化:把对象转换为 字节序列 * 2. 对象反序列化:把字节序列转换为 对象 * 3. 序列化目的:便于存储,便于传输, * 4. 对象序列化 前提条件:对象所属的类实现 Serializable接口, 实现 Serializable接口,仅仅是可序列化标志 * 5. transient关键字 作用:transient关键字修饰的属性,在序列化时其值将被忽略, 具体示例如测试方法 * 6. transient关键字 使用场景:对象序列化后得到的字节序列往往比较大,有时我们在对对象序列化时可以忽略一些不必要的属性,这时就可以用transient关键字 * 7. serialVersionUID: 表明类的版本,在运行时判断类的 serialVersionUID来验证版本一致性, * 在进行反序列化时,JVM会从字节序列中获取 serialVersonUID,然后与本地类中的serialVersionUID比较, * 如果一致,则反序列化;否则抛出序列化版本不一致异常。 * 最好显示的申明 serialVersionUID,java是跨平台的,不同平台生成的默认serialVersionUID 可能不同 * 8. OOS 实现对象序列化 * 9. OIS 实现对象反序列化 */ @Test public void testSerializable() throws IOException, ClassNotFoundException{ Person person = new Person("tom", 20, "male"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 序列化 ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(person); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); // 反序列化 ObjectInputStream ois = new ObjectInputStream(bais); Person desPerson = (Person)ois.readObject(); System.out.println("desPerson: " + desPerson); // desPerson: Person [name=null, age=20, gender=male] }}
Person 类如下:
package se;import java.io.Serializable;/** * person类 实现 序列化接口 */public class Person implements Serializable{ private static final long serialVersionUID = -6114732713202180428L; // add transient key private transient String name; private int age; private String gender; /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", gender=" + gender + "]"; } /** * @param name * @param age * @param gender */ public Person(String name, int age, String gender) { super(); this.name = name; this.age = age; this.gender = gender; } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @return the age */ public int getAge() { return age; } /** * @param age the age to set */ public void setAge(int age) { this.age = age; } /** * @return the gender */ public String getGender() { return gender; } /** * @param gender the gender to set */ public void setGender(String gender) { this.gender = gender; }}
阅读全文
0 0
- java中的Serializable接口
- java.io 接口 Serializable
- java.io.Serializable 接口
- java.io.Serializable 接口
- java的Serializable接口
- Java Serializable接口
- java中的serializable接口
- java.io.Serializable接口
- Java中serializable接口
- java Serializable 接口
- Java Serializable接口
- Serializable 接口–java.io.serializable
- Serializable 接口–java.io.serializable
- java中的Serializable接口作用
- java 序列化 Serializable接口
- java.io.Serializable这个接口
- java.io.Serializable这个接口
- java对象实现Serializable接口
- Android CardView
- java中泛型创建数组的总结
- HDU 6090 Rikka with Graph(思维)
- 性能测试 PTS 铂金版来袭!阿里云发布T级数据压测的终极秘笈
- C#之字符判断和大小写的转换
- java Serializable 接口
- 5179 beautiful number
- Log4j日志配置详解
- libnm-qt 填坑
- 基于连通域的汉字切割
- 最长公共子序列问题
- python 进阶-高阶函数
- hdu3047-带权并查集
- 欢迎使用CSDN-markdown编辑器