java 序列化作用

什么是序列化:

1.序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得。
序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传

输。反序列化就是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据。恢复数据要求

有恢复数据的对象实例;

2.java对象序列化不仅保留一个对象的数据,而且递归保存对象引用的每个对象的数据。可以将整个对象层次写入字节流中,可以保

存在文件中或在网络连接上传递。利用对象序列化可以进行对象的"深复制",即复制对象本身及引用的对象本身。序列化一个对象

可能得到整个对象序列。

序列化的特点是什么:
如果某个类能够被序列化,其子类也可以被序列化。

(二)序列化前提:

(1)要序列化对象必须是可序列化的,即必须实现 Serializable 接口。

(2)要序列化对象的属性也都是可序列化的。

(3)要序列化对象引用的对象也必须是可序列化的,如:要序列化一个 HashMap 实例,需要把放入到HashMap中的对象也都序列化



(4)要序列化一个内部类,该内部类必须可序列化,并且外部类也必须可序列化。

(5)基本数据类型都是可以序列化的。

示例如下:用于将序列化对象存储到文件中,及从文件中对读取对象

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class User implements Serializable {

public String name; // 姓名
public int age; // 年龄

public User(){}
public User(String name, int age) {// 有参构造
this.name = name;
this.age = age;
}

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;
}


/**
* @todo 将一个可以序列化的对象写入文件
* @param obj 要保存的对象
* @param fileName 目标文件
*/
public void writeToFile(Object obj, String fileName) {

try {
FileOutputStream fos = new FileOutputStream(fileName);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(obj);
oos.flush();
System.out.println("write ok");
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* @param fileName
* 保存对象的文件
* @return 从文件中得到的对象
*/
public Object getObjFromFile(String fileName) {
Object obj = null;
try {
System.out.println("*********"+fileName);
FileInputStream fis = new FileInputStream(fileName);
ObjectInputStream ois = new ObjectInputStream(fis);
obj = ois.readObject();
System.out.println("read ok..");
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}

public static void main(String[] args) {
String fileName = "c:\\user.txt"; // 保存对象的文件
List<User> l = new ArrayList<User>();
for (int i = 0; i < 5; i++) {
User user = new User("中国人民共和国"+(i+1), 28+i);
l.add(user);
}
User user = new User(); // 创建一个User对象
user.writeToFile(l, fileName); // 将对象写入文件
List<User> ul = (List<User>)(user.getObjFromFile(fileName)); // 从文件中取得对象

if (ul != null)
//System.out.println("get user from file ok,and name is : "); // 输出对象名
for (Iterator iter = ul.iterator(); iter.hasNext();) {
User u = (User) iter.next();
System.out.println("......userName.........."+u.getName()+"---------"+u.getAge());
}
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值