序列化和反序列化
2014-01-07 14:27
253 查看
对象序列化就是把对象写到某一个地方,但是在写的过程中肯定要经过一层管道,这个叫做序列化。
比如说:object是一个对象,在使用的时候我们肯定要放在内存里(但是断电数据就没了),但有时候我们要把这个对象通过某种方式存到一个地方,比如硬盘、数据库、网络,那么这个object要去到某一个地方就要经过序列化,那我就讲一个放到硬盘里面的例子。
对象在存到硬盘里的时候就不能以存在内存的方式存在硬盘里,需要变个身,就跟天上的神仙下凡,必须要变成人,这个变化的过程就叫做序列化。
序列化就是给它变个身,变得让她适应这个硬盘存储的方式。
有时候我们需要把这个文件读取出来,变成内存里面的东西,那么这个过程就叫做反序列化。
要实现这个序列化,必须要实现序列化的这个接口(hibernate里面有提到过),以后出现序列化的错误想都不用想,看看实现了这个接口没有。
首先我们先建立一个java工程:
1.建立一个pojo或者entity
文件格式可以自定义,随便什么都可以
3.下面我们需要建立一个类把文件读取出来(也就是反序列化)
test.User@c80f4cb
lucy : 1
也可以把对象通过socket传送出去。
EJB内部也是通过这个实现的,EJB由很多分布式的机器(虚拟机),每一个虚拟机有很多自己的对象,按道理,每一个虚拟机只能管自己的对象,不同虚拟机可以通过对象相互交流,可以通过虚拟机的某个对象传到另一个地方,内部也是通过序列化实现的。
比如说: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由很多分布式的机器(虚拟机),每一个虚拟机有很多自己的对象,按道理,每一个虚拟机只能管自己的对象,不同虚拟机可以通过对象相互交流,可以通过虚拟机的某个对象传到另一个地方,内部也是通过序列化实现的。
相关文章推荐
- Xsd: Xml序列化、反序列化的利器
- java序列化和反序列化 以及transient的含义
- 《WCF技术内幕》翻译26:第2部分_第5章_消息:Buffered vs Streamed、序列化和反序列化消息
- java 序列化和反序列化
- 使用序列化和反序列化机制深度复制对象
- Json序列化、反序列化互换
- java序列化,反序列化及反序列如何判断是否已读到文件末尾
- Unity RSA 加密数据 序列化和反序列化 通用方法
- 将对象序列化和反序列化
- DAY32继承组合应用、对象序列化和反序列化,选课系统综合示例
- 序列化和反序列化对象到 数据库
- 剑指offer——序列化,反序列化二叉树(好题)
- 序列化和反序列化-刘丁
- Java对象的序列化和反序列化
- Android Intent 序列化反序列化
- 深度剖析C#序列化和反序列化
- 深入探讨C#序列化和反序列化
- Java对象的序列化和反序列化
- Java序列化和反序列化
- c#数据的序列化和反序列化(推荐版)