序列化(Serialization)一个对象
2016-08-06 17:19
453 查看
序列化一个对象
1. 序列化的概念序列化:首先,用日常生活中的例子来理解一下序列化。在我们日常生活中,运输一个整个的汽车总是不方便的,所以我们会把汽车拆开,当汽车变成一个个零件的时候,我们的运输任务也会轻松很多。那么在我们敲代码的时候,我们会用各种方式保存数据,那么java会提供给你自动的一种保存数据的方法,就是我们所说的序列化。正确的说:序列化是将数据结构或对象转换成二进制串的过程,简单点说序列化就是就是将数据分解成字节流,以便存储在文件中或在网络上传输的过程。反序列化就是打开字节流并重构对象。
2. 序列化的作用
1)序列化是为了保存内存中各种对象的状态,并且可以把保存的对象状态再读出来。
2)可以实现数据的持久化,在MVC模式中很有用
3)可以对象数据的远程通信。
4)对象序列化的作用:就是在传递,和保存对象(object)的时候,保证对象的完整性和可传递性。譬如通过网络传输,或者把一个对象保存成一个文件的时候,要实现序列化接口
3. 序列化的应用场景
a)当你想把的内存中的对象保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;
附加:Java RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。
4. 序列化如何实现
1) 写一个POJO类,实现Serializable.(必须实现这个接口,不然不能序列化)
<span style="font-size:18px;"> import java.io.Serializable; public class Student implements Serializable{ private String name; private char sex; private int age; private double weight; public Student() { super(); // TODO Auto-generated constructor stub } public Student(String name, char sex, int age, double weight) { super(); this.name = name; this.sex = sex; this.age = age; this.weight = weight; } public String getName() { return name; } public void setName(String name) { this.name = name; } public char getSex() { return sex; } public void setSex(char sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public double getWeight() { return weight; } public void setWeight(double weight) { this.weight = weight; } } </span>
2) 创建一个序列化的类,需要创建一个File文件,可以看出序列化后的文件内容,为了演示效果,我这里用了.txt格式的文件,然后转化用转化成字节流的形式来序列化这几个对象
<span style="font-size:18px;">import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class Serializable{ public static void main(String[] args) { Student stu = new Student("丫头",'女',20,45.2); File file = new File("G:/java/a.txt"); try { file.createNewFile(); } catch (Exception e) { e.printStackTrace(); } try { FileOutputStream fos = new FileOutputStream(file); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(stu); oos.flush(); oos.close(); fos.close(); //Student对象反序列化过程 FileInputStream fis = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fis); Student stu1 = (Student) ois.readObject(); System.out.println("name = " + stu1.getName()); System.out.println("sex = " + stu1.getSex()); System.out.println("year = " + stu1.getAge()); System.out.println("gpa = " + stu1.getWeight()); ois.close(); fis.close(); } catch (Exception e) { e.printStackTrace(); } } }</span>
3) 看序列化后的结果
这个就是上面解释的二进制串,是容易传输的一种格式,如果想看结果,就要进行反序列化
sr com.bao.StudentZ絈AE? I ageC sexD weightL namet Ljava/lang/String;xp Ys@F櫃櫃櫄t 涓ご
4)反序列化。上述代码已经写出反序列化的代码,这个进行反序列化的结果
name = 丫头 sex = 女 age = 20 weight = 45.2
相关文章推荐
- ActiveRecord 对象在Json序列化时,出现异常Newtonsoft.Json.JsonSerializationException: Self referencing loop
- 深度复制一个对象方法。利用反射机制,不使用Serialization,也不使用ICloneable接口
- 简述Xml.Serialization如何序列化对象到XML文件
- 对象序列化Serialization与Deserialize方法进行反序列化
- .net中的对象序列化(1): 序列化是什么, 以及一个简单的例子
- 一个简单的把对象序列化/反序列化为json格式的程序
- .net中的对象序列化(1): 序列化是什么, 以及一个简单的例子
- 将对象序列化成为一个byte数组
- Java中如何序列化一个对象
- 一个可序列化的C#对象,如何转成一个XML格式的文件或字符串
- 通过序列化来判断一个对象是否已经更改
- 简述Xml.Serialization如何序列化对象到XML文件
- System.Runtime.Serialization.Formatters.Soap.SoapFormatter 反序列化第一个可序列化的对象
- 在使用Linq to SQL并序列化一个数据对象的时候报System.InvalidOperationException异常,序列化类型XXX的对象时检测到循环引用。
- 分享一个对象序列化为XML和反序列化的扩展方法
- 一个利用了异步处理,事件驱动,对象序列化等技术的类Parser完整代码示例
- 序列化上面创建的Person对象,使其成为一个JSON字符串
- 一个使用WebService xml和序列化对象的小例子(一)
- 一个自定义的json序列化对象的方法
- 一个简单的java对象序列化工具类