博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一. 序列化和反序列化的概念

  序列化:将对象转换成字节序列的过程称为对象的序列化。

  反序列化:将字节序列恢复成对象的过程称为对象的反序列化。

二. 什么时候需要序列化

  对象序列化的场景

  1) 需要将内存中对象的字节序列永久化保存到磁盘中,通常是放在一个文件中;

  2) 在网络上传送对象的字节序列到任何其他程序。

三. 如何进行序列化和反序列化

  序列化的步骤:

  1)创建一个对象输出流ObjectOutputStream ,它可以包装一个目标对象的输出流,比如文件输出流;

  2)使用对象输出流的writeObject()方法写对象。

  反序列化的步骤:

  1)创建一个对象输入流ObjectInputStream,它可以包装成一个目标对象的输入流,比如文件输入流;

  2)使用对象输入流的readObject()方法读对象。

四. 序列化在项目中的应用

 1 import java.io.Serializable;
 2 
 3 public class Student implements Serializable {
 4 
 5     private String name;
 6     private int age;
 7 
 8     public String getName() {
 9         return name;
10     }
11 
12     public void setName(String name) {
13         this.name = name;
14     }
15 
16     public int getAge() {
17         return age;
18     }
19 
20     public void setAge(int age) {
21         this.age = age;
22     }
23 }

 

 1 import com.abc.bean.Student;
 2 import org.junit.Test;
 3 
 4 import java.io.*;
 5 
 6 public class TestSerializeAndDeserizlize {
 7 
 8     /**
 9      *  序列化
10      */
11     @Test
12     public void testSerialize() throws IOException {
13         Student student = new Student();
14         student.setName("天使");
15         student.setAge(1);
16         // 对象输出流
17         ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(new File("E:/student.txt")));
18         oo.writeObject(student);
19         System.out.println("Student对象序列化成功");
20     }
21 
22     @Test
23     public void testDeserrialize() throws IOException, ClassNotFoundException {
24         // 对象输入流
25         ObjectInputStream oi = new ObjectInputStream(new FileInputStream(new File("E:/student.txt")));
26         Student student = (Student) oi.readObject();
27         System.out.println(student.getAge());
28         System.out.println(student.getName());
29         System.out.println("student对象反序列化成功");
30 
31     }
32 }
# 控制台输出
"C:\Program Files\Java\jdk1.8.0_261\bin\java.exe" -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:50887,suspend=y,server=n -ea -Didea.test.cyclic.buffer.size=1048576 -javaagent:C:\Users\Administrator\AppData\Local\JetBrains\IntelliJIdea2020.2\captureAgent\debugger-agent.jar -Dfile.encoding=UTF-8 -classpath "D:\IntelliJ IDEA 2020.2\lib\idea_rt.jar;D:\IntelliJ IDEA 2020.2\plugins\junit\lib\junit5-rt.jar;D:\IntelliJ IDEA 2020.2\plugins\junit\lib\junit-rt.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\rt.jar;E:\parttime\01-primary\target\test-classes;E:\parttime\01-primary\target\classes;D:\apache-maven-3.6.3\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.4.0\spring-boot-test-autoconfigure-2.4.0.jar;D:\apache-maven-3.6.3\repository\org\springframework\boot\spring-boot-starter-web\2.4.0\spring-boot-starter-web-2.4.0.jar;D:\apache-maven-3.6.3\repository\org\springframework\boot\spring-boot-starter\2.4.0\spring-boot-starter-2.4.0.jar;D:\apache-maven-3.6.3\repository\org\springframework\boot\spring-boot\2.4.0\spring-boot-2.4.0.jar;D:\apache-maven-3.6.3\repository\org\springframework\boot\spring-boot-autoconfigure\2.4.0\spring-boot-autoconfigure-2.4.0.jar;D:\apache-maven-3.6.3\repository\org\springframework\boot\spring-boot-starter-logging\2.4.0\spring-boot-starter-logging-2.4.0.jar;D:\apache-maven-3.6.3\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;D:\apache-maven-3.6.3\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;D:\apache-maven-3.6.3\repository\org\apache\logging\log4j\log4j-to-slf4j\2.13.3\log4j-to-slf4j-2.13.3.jar;D:\apache-maven-3.6.3\repository\org\apache\logging\log4j\log4j-api\2.13.3\log4j-api-2.13.3.jar;D:\apache-maven-3.6.3\repository\org\slf4j\jul-to-slf4j\1.7.30\jul-to-slf4j-1.7.30.jar;D:\apache-maven-3.6.3\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;D:\apache-maven-3.6.3\repository\org\yaml\snakeyaml\1.27\snakeyaml-1.27.jar;D:\apache-maven-3.6.3\repository\org\springframework\boot\spring-boot-starter-json\2.4.0\spring-boot-starter-json-2.4.0.jar;D:\apache-maven-3.6.3\repository\com\fasterxml\jackson\core\jackson-databind\2.11.3\jackson-databind-2.11.3.jar;D:\apache-maven-3.6.3\repository\com\fasterxml\jackson\core\jackson-annotations\2.11.3\jackson-annotations-2.11.3.jar;D:\apache-maven-3.6.3\repository\com\fasterxml\jackson\core\jackson-core\2.11.3\jackson-core-2.11.3.jar;D:\apache-maven-3.6.3\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.11.3\jackson-datatype-jdk8-2.11.3.jar;D:\apache-maven-3.6.3\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.11.3\jackson-datatype-jsr310-2.11.3.jar;D:\apache-maven-3.6.3\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.11.3\jackson-module-parameter-names-2.11.3.jar;D:\apache-maven-3.6.3\repository\org\springframework\boot\spring-boot-starter-tomcat\2.4.0\spring-boot-starter-tomcat-2.4.0.jar;D:\apache-maven-3.6.3\repository\org\glassfish\jakarta.el\3.0.3\jakarta.el-3.0.3.jar;D:\apache-maven-3.6.3\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.39\tomcat-embed-websocket-9.0.39.jar;D:\apache-maven-3.6.3\repository\org\springframework\spring-web\5.3.1\spring-web-5.3.1.jar;D:\apache-maven-3.6.3\repository\org\springframework\spring-beans\5.3.1\spring-beans-5.3.1.jar;D:\apache-maven-3.6.3\repository\org\springframework\spring-webmvc\5.3.1\spring-webmvc-5.3.1.jar;D:\apache-maven-3.6.3\repository\org\springframework\spring-aop\5.3.1\spring-aop-5.3.1.jar;D:\apache-maven-3.6.3\repository\org\springframework\spring-context\5.3.1\spring-context-5.3.1.jar;D:\apache-maven-3.6.3\repository\org\springframework\spring-expression\5.3.1\spring-expression-5.3.1.jar;D:\apache-maven-3.6.3\repository\org\springframework\boot\spring-boot-starter-test\2.4.0\spring-boot-starter-test-2.4.0.jar;D:\apache-maven-3.6.3\repository\org\springframework\boot\spring-boot-test\2.4.0\spring-boot-test-2.4.0.jar;D:\apache-maven-3.6.3\repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;D:\apache-maven-3.6.3\repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;D:\apache-maven-3.6.3\repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;D:\apache-maven-3.6.3\repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;D:\apache-maven-3.6.3\repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;D:\apache-maven-3.6.3\repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.3\jakarta.xml.bind-api-2.3.3.jar;D:\apache-maven-3.6.3\repository\jakarta\activation\jakarta.activation-api\1.2.2\jakarta.activation-api-1.2.2.jar;D:\apache-maven-3.6.3\repository\org\assertj\assertj-core\3.18.1\assertj-core-3.18.1.jar;D:\apache-maven-3.6.3\repository\org\hamcrest\hamcrest\2.2\hamcrest-2.2.jar;D:\apache-maven-3.6.3\repository\org\junit\jupiter\junit-jupiter\5.7.0\junit-jupiter-5.7.0.jar;D:\apache-maven-3.6.3\repository\org\junit\jupiter\junit-jupiter-api\5.7.0\junit-jupiter-api-5.7.0.jar;D:\apache-maven-3.6.3\repository\org\apiguardian\apiguardian-api\1.1.0\apiguardian-api-1.1.0.jar;D:\apache-maven-3.6.3\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;D:\apache-maven-3.6.3\repository\org\junit\platform\junit-platform-commons\1.7.0\junit-platform-commons-1.7.0.jar;D:\apache-maven-3.6.3\repository\org\junit\jupiter\junit-jupiter-params\5.7.0\junit-jupiter-params-5.7.0.jar;D:\apache-maven-3.6.3\repository\org\junit\jupiter\junit-jupiter-engine\5.7.0\junit-jupiter-engine-5.7.0.jar;D:\apache-maven-3.6.3\repository\org\junit\platform\junit-platform-engine\1.7.0\junit-platform-engine-1.7.0.jar;D:\apache-maven-3.6.3\repository\org\mockito\mockito-core\3.6.0\mockito-core-3.6.0.jar;D:\apache-maven-3.6.3\repository\net\bytebuddy\byte-buddy\1.10.18\byte-buddy-1.10.18.jar;D:\apache-maven-3.6.3\repository\net\bytebuddy\byte-buddy-agent\1.10.18\byte-buddy-agent-1.10.18.jar;D:\apache-maven-3.6.3\repository\org\objenesis\objenesis\3.1\objenesis-3.1.jar;D:\apache-maven-3.6.3\repository\org\mockito\mockito-junit-jupiter\3.6.0\mockito-junit-jupiter-3.6.0.jar;D:\apache-maven-3.6.3\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;D:\apache-maven-3.6.3\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;D:\apache-maven-3.6.3\repository\org\springframework\spring-core\5.3.1\spring-core-5.3.1.jar;D:\apache-maven-3.6.3\repository\org\springframework\spring-jcl\5.3.1\spring-jcl-5.3.1.jar;D:\apache-maven-3.6.3\repository\org\springframework\spring-test\5.3.1\spring-test-5.3.1.jar;D:\apache-maven-3.6.3\repository\org\xmlunit\xmlunit-core\2.7.0\xmlunit-core-2.7.0.jar;D:\apache-maven-3.6.3\repository\org\springframework\boot\spring-boot-starter-actuator\2.4.0\spring-boot-starter-actuator-2.4.0.jar;D:\apache-maven-3.6.3\repository\org\springframework\boot\spring-boot-actuator-autoconfigure\2.4.0\spring-boot-actuator-autoconfigure-2.4.0.jar;D:\apache-maven-3.6.3\repository\org\springframework\boot\spring-boot-actuator\2.4.0\spring-boot-actuator-2.4.0.jar;D:\apache-maven-3.6.3\repository\io\micrometer\micrometer-core\1.6.1\micrometer-core-1.6.1.jar;D:\apache-maven-3.6.3\repository\org\hdrhistogram\HdrHistogram\2.1.12\HdrHistogram-2.1.12.jar;D:\apache-maven-3.6.3\repository\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;D:\apache-maven-3.6.3\repository\org\apache\tomcat\embed\tomcat-embed-jasper\9.0.39\tomcat-embed-jasper-9.0.39.jar;D:\apache-maven-3.6.3\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.39\tomcat-embed-core-9.0.39.jar;D:\apache-maven-3.6.3\repository\org\apache\tomcat\tomcat-annotations-api\9.0.39\tomcat-annotations-api-9.0.39.jar;D:\apache-maven-3.6.3\repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.39\tomcat-embed-el-9.0.39.jar;D:\apache-maven-3.6.3\repository\org\eclipse\jdt\ecj\3.18.0\ecj-3.18.0.jar;D:\apache-maven-3.6.3\repository\junit\junit\4.13.1\junit-4.13.1.jar;D:\apache-maven-3.6.3\repository\org\hamcrest\hamcrest-core\2.2\hamcrest-core-2.2.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 com.abc.serialize.TestSerializeAndDeserizlize Connected to the target VM, address: '127.0.0.1:50887', transport: 'socket' 1 天使 student对象反序列化成功 Student对象序列化成功 Disconnected from the target VM, address: '127.0.0.1:50887', transport: 'socket' Process finished with exit code 0

 参考博客:

  https://www.cnblogs.com/xdp-gacl/p/3777987.html

posted on 2020-12-22 18:02  博浪沙2015  阅读(185)  评论(0编辑  收藏  举报