您的位置:首页 > 其它

序列化和反序列化

2014-01-07 14:27 253 查看
对象序列化就是把对象写到某一个地方,但是在写的过程中肯定要经过一层管道,这个叫做序列化。
比如说:object是一个对象,在使用的时候我们肯定要放在内存里(但是断电数据就没了),但有时候我们要把这个对象通过某种方式存到一个地方,比如硬盘、数据库、网络,那么这个object要去到某一个地方就要经过序列化,那我就讲一个放到硬盘里面的例子。
对象在存到硬盘里的时候就不能以存在内存的方式存在硬盘里,需要变个身,就跟天上的神仙下凡,必须要变成人,这个变化的过程就叫做序列化。
序列化就是给它变个身,变得让她适应这个硬盘存储的方式。
有时候我们需要把这个文件读取出来,变成内存里面的东西,那么这个过程就叫做反序列化。
要实现这个序列化,必须要实现序列化的这个接口(hibernate里面有提到过),以后出现序列化的错误想都不用想,看看实现了这个接口没有。
首先我们先建立一个java工程:
1.建立一个pojo或者entity
public class User implements java.io.Serializable{
private String name;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}

}
2.建立一个测试类,把对象存到文件中

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class TestMain {
public static void main(String[] args) throws IOException {
//首先建立一个对象
User user=new User();
user.setName("lucy");
user.setSex("1");

//把这个对象存到硬盘里
//在工程下新建一个data文件夹,把数据存到这个文件夹里
//不需要建立直接在路径后面写上文件名称(后缀其他格式也可以)
//ser是tomcat的session的存储格式
FileOutputStream fos=new FileOutputStream("E:\\workspaces\\SeriableTest\\data\\user.ser");
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(user);
oos.close();
}
}
右键运行一下,就会在data文件夹下生成user.ser文件,打不开,是二进制文件。
文件格式可以自定义,随便什么都可以
3.下面我们需要建立一个类把文件读取出来(也就是反序列化)
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class ReadObject {
public static void main(String[] args) throws IOException, Exception {
//读取出这个文件
FileInputStream fis=new FileInputStream("E:\\workspaces\\SeriableTest\\data\\user.ser");
ObjectInputStream ois=new ObjectInputStream(fis);
Object obj=ois.readObject();
ois.close();
System.out.println(obj);
User user=(User)obj;
System.out.println(user.getName()+" : "+user.getSex());
}
}
打印的结果是:
test.User@c80f4cb
lucy : 1

也可以把对象通过socket传送出去。
EJB内部也是通过这个实现的,EJB由很多分布式的机器(虚拟机),每一个虚拟机有很多自己的对象,按道理,每一个虚拟机只能管自己的对象,不同虚拟机可以通过对象相互交流,可以通过虚拟机的某个对象传到另一个地方,内部也是通过序列化实现的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息