首先解釋兩個(gè)概念,何為序列化?何為反序列化?
序列化:將對(duì)象轉(zhuǎn)化成流的過程稱為序列化
反序列化:將流轉(zhuǎn)化成對(duì)象的過程稱之為反序列化
序列化與反序列化必須遵守的原則
a) Java對(duì)象
在java中要想使一個(gè)java對(duì)象可以實(shí)現(xiàn)序列化與反序列化,必須讓該類實(shí)現(xiàn)java.io.Serializable接口
java.io.Serializable接口定義如下:
publicinterface Serializable {
}
|
從上述定義中可以看到該接口中未定義任何方法,這大大的簡(jiǎn)化了開發(fā)者
b) 序列化主要依賴java.io.ObjectOutputStream類,該類對(duì)java.io.FileOutputStream進(jìn)一步做了封裝,這里主要使用ObjectOutputStream類的writeObject()方法實(shí)現(xiàn)序列化功能
Demo:
/**
*將對(duì)象序列化到磁盤文件中
*@paramo
*@throwsException
*/
publicstaticvoid writeObject(Object o) throws Exception{
File f=new File("d:""user.tmp");
if(f.exists()){
f.delete();
}
FileOutputStream os=new FileOutputStream(f);
//ObjectOutputStream 核心類
ObjectOutputStream oos=new ObjectOutputStream(os);
oos.writeObject(o);
oos.close();
os.close();
}
|
c) 反序列化主要依賴java.io.ObjectInputStream類,該類對(duì)java.io.InputStream進(jìn)一步做了封裝,這里主要使用ObjectInputStream類的readObject()方法實(shí)現(xiàn)序列化功能
Demo:
/**
*反序列化,將磁盤文件轉(zhuǎn)化為對(duì)象
*@paramf
*@return
*@throwsException
*/
publicstatic User readObject(File f) throws Exception{
InputStream is=new FileInputStream(f);
//ObjectOutputStream 核心類
ObjectInputStream ois=new ObjectInputStream(is);
return (User)ois.readObject();
}
|
貼出完整的demo
Java對(duì)象:
package com.io.bean;
import java.io.Serializable;
publicclass User implements Serializable {
privateintuserId;
private String userName;
private String userSex;
privateintuserAge;
publicint getUserAge() {
returnuserAge;
}
publicvoid setUserAge(int userAge) {
this.userAge = userAge;
}
publicint getUserId() {
returnuserId;
}
publicvoid setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
returnuserName;
}
publicvoid setUserName(String userName) {
this.userName = userName;
}
public String getUserSex() {
returnuserSex;
}
publicvoid setUserSex(String userSex) {
this.userSex = userSex;
}
@Override
public String toString() {
returnthis.getUserId() + " " + this.getUserName() + " "
+ this.getUserSex() + " " + this.getUserAge();
}
}
|
序列化與反序列化
package com.io.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import com.io.bean.User;
publicclass TestSerializable {
/**
*將對(duì)象序列化到磁盤文件中
*@paramo
*@throwsException
*/
publicstaticvoid writeObject(Object o) throws Exception{
File f=new File("d:""user.tmp");
if(f.exists()){
f.delete();
}
FileOutputStream os=new FileOutputStream(f);
//ObjectOutputStream 核心類
ObjectOutputStream oos=new ObjectOutputStream(os);
oos.writeObject(o);
oos.close();
os.close();
}
/**
*反序列化,將磁盤文件轉(zhuǎn)化為對(duì)象
*@paramf
*@return
*@throwsException
*/
publicstatic User readObject(File f) throws Exception{
InputStream is=new FileInputStream(f);
//ObjectOutputStream 核心類
ObjectInputStream ois=new ObjectInputStream(is);
return (User)ois.readObject();
}
publicstaticvoid main(String[] args) throws Exception{
/*****************將對(duì)象序列化***************/
/*
User user=new User();
user.setUserId(1);
user.setUserName("張藝謀");
user.setUserSex("男");
user.setUserAge(50);
TestSerializable.writeObject(user);
*/
/*****************將對(duì)象序反列化***************/
User user=TestSerializable.readObject(new File("d:""user.tmp"));
System.out.println(user);
}
}
|