Java反序列化
Posted 命运的绯色结局
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java反序列化相关的知识,希望对你有一定的参考价值。
一、序列化和反序列化的概念
把对象转换为字节序列的过程称为对象的序列化。
把字节序列恢复为对象的过程称为对象的反序列化。
对象的序列化主要有两种用途:
1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
2) 在网络上传送对象的字节序列。
对象序列化包括如下步骤:
1) 创建一个对象输出流,它可以包装一个其他类型的目标输出流,如文件输出流;
2) 通过对象输出流的writeObject()方法写对象。
对象反序列化的步骤如下:
1) 创建一个对象输入流,它可以包装一个其他类型的源输入流,如文件输入流;
2) 通过对象输入流的readObject()方法读取对象。
因为实现序列化是基于流实现的,所以这里需要实现序列化的对象一定要实现
Serializable接口,不然会报错
Exception in thread "main" java.io.NotSerializableException: com.founder.sun.Person at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) at com.founder.sun.Demo2.main(Demo2.java:29)
下面直接上实现代码:
package com.founder.sun; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutput; import java.io.ObjectOutputStream; import java.io.Serializable; public class Demo2 { /** * @throws ClassNotFoundException * */ public static void main(String[] args) throws IOException, ClassNotFoundException { // TODO Auto-generated method stub Person person = new Person(); person.setAge("25"); person.setName("Tom"); System.out.println(person.getName()); FileOutputStream file = new FileOutputStream("Person.txt"); ObjectOutputStream ob = new ObjectOutputStream(file); ob.writeObject(person); System.out.println("序列化成功!!!"); ob.close(); System.out.println("进行反序列化!!!"); FileInputStream file_in = new FileInputStream("Person.txt"); ObjectInputStream obe = new ObjectInputStream(file_in); Person Unknow =(Person)obe.readObject(); System.out.println(Unknow.getName() + " is " + Unknow.getAge()); System.out.println("反序列化成功!!!"); obe.close(); } } class Person implements Serializable{ /** * */ private static final long serialVersionUID = 1L; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String name; public String age; }
结果:
以上是关于Java反序列化的主要内容,如果未能解决你的问题,请参考以下文章
java反序列化 - Transformer类可以执行恶意代码的原理