前言:有没有想过,如何将对象进行“加密”后写入磁盘?序列化帮你实现!

1.概念

序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象.

2.反序列化Java实验

--测试的实体类--

 package exercise;

 import java.io.Serializable;

 public class Person implements Serializable{
private String name;
private int age; public Person() {
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public Person(String name, int age) {
super();
this.name = name;
this.age = age;
} }

1)单对象序列化

 package exercise;

 import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List; public class ObjectStreamDemo1 {
/**
* @param args
* @throws IOException
* @throws ClassNotFoundException
*/ public final static String PATH = "obj.object1"; public static void main(String[] args) throws IOException,
ClassNotFoundException {
//writeObj();
readObj();
System.out.println("--End--");
} public static void readObj() throws IOException, ClassNotFoundException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
PATH)); Person p = (Person)ois.readObject();
System.out.println(p.getName() + "|" + p.getAge()); } public static void writeObj() throws IOException {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(
PATH)); oos.writeObject(new Person("张三", 30));
oos.close();
}
}

结果显示

2)多对象序列化

 package exercise;

 import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List; public class ObjectStreamDemo2 {
/**
* @param args
* @throws IOException
* @throws ClassNotFoundException
*/
public final static String PATH = "obj.object";
public static void main(String[] args) throws IOException,
ClassNotFoundException { //writeObj();
readObj();
System.out.println("---end!---");
} public static void readObj() throws IOException, ClassNotFoundException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
PATH)); List<Person> persons = (List<Person>)ois.readObject();
for(Person p:persons){
System.out.println(p.getName() + "|" + p.getAge());
}
} public static void writeObj() throws IOException {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(
PATH)); List<Person> persons = new ArrayList<Person>();
Person p1 = new Person("张三",18);
Person p2 = new Person("李四",19);
persons.add(p1);
persons.add(p2);
oos.writeObject(persons);
oos.close();
}
}

结果显示

注意:

·实体类必须实现序列化接口“java.io.Serializable”

·生成的obj.object 因为是二进制文件,故无法正常打开,若notepad打开也是乱码!

总结:序列化技术在web端技术的应用相当重要,希望学习Java的朋友都能理解该技术并进行应用。

Java反序列化测试的更多相关文章

  1. Java反序列化漏洞通用利用分析

    原文:http://blog.chaitin.com/2015-11-11_java_unserialize_rce/ 博主也是JAVA的,也研究安全,所以认为这个漏洞非常严重.长亭科技分析的非常细致 ...

  2. Java反序列化漏洞分析

    相关学习资料 http://www.freebuf.com/vuls/90840.html https://security.tencent.com/index.php/blog/msg/97 htt ...

  3. java反序列化漏洞原理研习

    零.Java反序列化漏洞 java的安全问题首屈一指的就是反序列化漏洞,可以执行命令啊,甚至直接getshell,所以趁着这个假期好好研究一下java的反序列化漏洞.另外呢,组里多位大佬对反序列化漏洞 ...

  4. Java反序列化漏洞之殇

    ref:https://xz.aliyun.com/t/2043 小结: 3.2.2版本之前的Apache-CommonsCollections存在该漏洞(不只该包)1.漏洞触发场景 在java编写的 ...

  5. Lib之过?Java反序列化漏洞通用利用分析

    转http://blog.chaitin.com/ 1 背景 2 Java反序列化漏洞简介 3 利用Apache Commons Collections实现远程代码执行 4 漏洞利用实例 4.1 利用 ...

  6. [JAVA反序列化DEMO]利用RMI进行反序列化一键启动工具

    功能: 命令行启动jar包,用户自定义启动RMI端口.默认内置Apache Commons Collections.只需一键启动即可测试java反序列化漏洞. 启动服务: [root@sevck_v3 ...

  7. 学习笔记 | java反序列化漏洞分析

    java反序列化漏洞是与java相关的漏洞中最常见的一种,也是网络安全工作者关注的重点.在cve中搜索关键字serialized共有174条记录,其中83条与java有关:搜索deserialized ...

  8. 浅谈java反序列化工具ysoserial

    前言 关于java反序列化漏洞的原理分析,基本都是在分析使用Apache Commons Collections这个库,造成的反序列化问题.然而,在下载老外的ysoserial工具并仔细看看后,我发现 ...

  9. 对ysoserial工具及java反序列化的一个阶段性理解【未完成】

    经过一段时间的琢磨与反思,以及重读了大量之前看不懂的反序列化文章,目前为止算是对java反序列化这块有了一个阶段性的小理解. 目前为止,发送的所有java反序列化的漏洞中.主要需要两个触发条件: 1. ...

随机推荐

  1. Oracle之多行记录变一行记录,行变列,并排序(wmsys.wm_concat)

    原帖:http://www.cnblogs.com/nayitian/p/3231734.html wmsys.wm_concat Definition: The Oracle PL/SQL WM_C ...

  2. PAT 1017. A除以B (20)

    本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数.你需要输出商数Q和余数R,使得A = B * Q + R成立. 输入格式: 输入在1行中依次给出A和B,中间以1空格分隔. 输出格 ...

  3. java集合比较

    几种集合的比较Hashset,hashmap无序的treeset,hashset有序的 linkedhashset 有序的,和插入数序一样的

  4. 02传智_jbpm与OA项目_部门模块

    部门模块:具有增删改查(部门)的功能. Dao层的实现: 1,定义一个DepartmentDao.java. 定义基本的数据库操作.

  5. swift 集合类型(二)

    说到swift的集合类型,就不得不谈到Dictionary.包含一个键值对组合的集合. var air = ["name":"warner","tit ...

  6. office 2010 2013卸载工具

    http://www.ithome.com/html/soft/32777.htm Office 2003 || Office 2007 || Office 2010.

  7. 通过ssh tunnel连接内网ECS和RDS

    通过ssh tunnel连接内网ECS和RDS 这里讲了ssh tunnel的原理.很清晰. 此后又给外网访问内网增加了一种思路.感觉特别棒. 拓宽了思路:

  8. 运行mvc3.0项目所需dll

    Microsoft.Web.Infrastructure 位置:C:\Program Files\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies ...

  9. 利用javascript对提交数据验证

    优点:提交前验证.在客户端进行. <html> <head> <script language="javascript"> function c ...

  10. Qt5 新特性

    Qt 5 已经临近发布,其最大的特点就是模块化.将原来庞大的模块更细分为不同的部分,同时,一个大版本的升级,当然少不了添加.删除各个功能类.文本简单介绍 Qt5 的特性,其具体内容来自 Qt5 官方 ...