序列化和反序列化的学习例子

简介:

 package com.hanchao.test;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import com.hanchao.demo.Person;

/**
 * 测试类
 * @author hanlw
 * 2012 - 07 -05
 */
public class Test_Four {

public static void main(String[] args) throws Exception{
 /**
  * 序列化和反序列化
  * 
  * 1.反序列化 :ObjectInputStream → java.io.InputStream
  *  (流 → Java对象)
  *  
  * 2.序列化 : ObjectOutputStream → java.io.OutputStream
  *  (Java对象 → 流,即ObjectOutputStream将Java对象的基本数据类型和图形写入OutputStream中)
  *  (注意:只能将支持java.io.Serializable接口的对象写入流中。
  *    即:类通过实现此接口来启动其序列化功能)
  *    
  * 3. 一个JAVA对象如果要进行序列化和反序列化,必须实现java.io.Serializable接口。
  * 
  * 4.可序列化类的子类也是可序列化的,但是如果子类可序列化,但是父类不一定可以序列化
  * 
  * 5.序列化运行时使用一个称为serialVersionUID的版本号,与每个可序列化类相关联。
  *   该序列号在反序列化过程中用于验证序列化对象的发送者与接受者是否为该对象加载了与序列化兼容的类。
  *  
  */
/**
 * 1.序列化
 */
File file = new File("C:/person.data");
//文件输出流
FileOutputStream fileOutputStream = new FileOutputStream(file);
//对象输出流
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
Person person = new Person();
person.setAddrees("中国");
person.setAge(12);
//序列化
objectOutputStream.writeObject(person);
objectOutputStream.flush();
objectOutputStream.close();
/**
 * 2.反序列化
 */
//文件输入流
FileInputStream fileInputStream = new FileInputStream(file);
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
Person p = (Person) objectInputStream.readObject();
System.out.println("年龄:"+p.getAge()+"\t地址:"+p.getAddrees());
objectInputStream.close();
}
}

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
person类
package com.hanchao.demo;

import java.io.Serializable;

/**
 * 实体类
 * @author hanlw
 * 2012 - 07 -05
 */
public class Person  implements Serializable{

private int age;
private transient String name; 
//注意事项:当你不想让Person类的某个属性参与序列化时,加上transient这个修饰符。如上
private String addrees;
//get...set...
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddrees() {
return addrees;
}
public void setAddrees(String addrees) {
this.addrees = addrees;
}
}
     本文转自韩立伟 51CTO博客,原文链接:http://blog.51cto.com/hanchaohan/922470 ,如需转载请自行联系原作者



 

相关文章
|
1月前
|
存储 C#
C#中的序列化和反序列化
C#中的序列化和反序列化
12 0
|
1月前
|
存储 Java 数据库
|
3月前
|
Go
golang力扣leetcode 297.二叉树的序列化与反序列化
golang力扣leetcode 297.二叉树的序列化与反序列化
24 0
|
4月前
|
存储 算法
【每日一题Day316】LC449序列化和反序列化二叉搜索树 | BFS
【每日一题Day316】LC449序列化和反序列化二叉搜索树 | BFS
25 0
|
3月前
|
存储 算法 Java
从零开始学习 Java:简单易懂的入门指南之IO序列化、打印流、压缩流(三十三)
从零开始学习 Java:简单易懂的入门指南之IO序列化、打印流、压缩流(三十三)
|
3月前
|
存储 算法 C++
leetcode-297:二叉树的序列化与反序列化
leetcode-297:二叉树的序列化与反序列化
22 1
|
3月前
|
分布式计算 Java 大数据
IO流【Java对象的序列化和反序列化、File类在IO中的作用、装饰器模式构建IO流体系、Apache commons-io工具包的使用】(四)-全面详解(学习总结---从入门到深化)
IO流【Java对象的序列化和反序列化、File类在IO中的作用、装饰器模式构建IO流体系、Apache commons-io工具包的使用】(四)-全面详解(学习总结---从入门到深化)
53 0
|
11天前
|
存储 Java
Java输入输出:解释一下序列化和反序列化。
Java中的序列化和反序列化是将对象转换为字节流和反之的过程。ObjectOutputStream用于序列化,ObjectInputStream则用于反序列化。示例展示了如何创建一个实现Serializable接口的Person类,并将其序列化到文件,然后从文件反序列化回Person对象。
18 5
|
1月前
|
存储 C#
C#中的序列化和反序列化案例
C#中的序列化和反序列化案例
12 0
|
1月前
|
JSON Java Maven
使用Jackson进行 JSON 序列化和反序列化
使用Jackson进行 JSON 序列化和反序列化
25 0

热门文章

最新文章