序列化与反序列化简介
Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。
将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息、对象的数据,还有对象中的数据类型可以用来在内存中新建对象。
整个过程都是 Java 虚拟机(JVM)独立的,也就是说,在一个平台上序列化的对象可以在另一个完全不同的平台上反序列化该对象。
类 ObjectInputStream 和 ObjectOutputStream 是高层次的数据流,它们包含反序列化和序列化对象的方法。
–https://www.runoob.com/java/java-serialization.html
序列化与反序列化代码示例
声明一个类
下面做代码演示,首先我们声明一个类,一个类想要序列化成功,必须实现java.io.Serializeable接口。
1 2 3 4 5 6 7 8
| public class Employee implements java.io.Serializable{ public String name; public String phoneNumber; public void nameCheck() { System.out.println("name is " + name); } }
|
序列化
下面代码完成了类的实例化和序列化到文件的操作:
1 2 3 4 5 6 7 8 9 10 11
| Employee e = new Employee(); e.name = "Hvnt3r"; e.phoneNumber = "144413141123";
FileOutputStream fileOutputStream = new FileOutputStream("./test.ser"); ObjectOutputStream outputStream = new ObjectOutputStream(fileOutputStream); outputStream.writeObject(e); outputStream.close(); fileOutputStream.close();
|
运行此段代码即可生成一个名为test.ser的二进制文件,此时通过xxd查看test.ser内容如下:
1 2 3 4 5 6 7
| 00000000: aced 0005 7372 0013 636f 6d2e 6876 6e74 ....sr..com.hvnt 00000010: 3372 2e45 6d70 6c6f 7965 6578 a396 1a12 3r.Employeex.... 00000020: a6d9 8602 0002 4c00 046e 616d 6574 0012 ......L..namet.. 00000030: 4c6a 6176 612f 6c61 6e67 2f53 7472 696e Ljava/lang/Strin 00000040: 673b 4c00 0b70 686f 6e65 4e75 6d62 6572 g;L..phoneNumber 00000050: 7100 7e00 0178 7074 0006 4876 6e74 3372 q.~..xpt..Hvnt3r 00000060: 7400 0c31 3434 3431 3331 3431 3132 33 t..144413141123
|
反序列化
通过objectInputStream.readObject()方法将序列化的文件转化为Employee类的引用
1 2 3 4 5 6 7 8 9
| FileInputStream fileInputStream = new FileInputStream("./test.ser"); ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); e = (Employee) objectInputStream.readObject(); objectInputStream.close(); fileInputStream.close();
System.out.println("Deserialize Employee ..."); System.out.println("Name: " + e.name); System.out.println("Phone: " + e.phoneNumber);
|
代码输出如下:
1 2 3
| Deserialize Employee ... Name: Hvnt3r Phone: 144413141123
|
漏洞产生与利用
未完待续👨💻