–> JAVA SE (13)
序列化

又称为持久化,将其写入磁盘中。
java提供对象序列化——一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、对象中数据的类型、对象的类型。将序列化对象写入文件之后,可以从文件中读出并对其反序列化——对象的数据及类型、对象的类型可以用来在内存中新建对象
整个过程是Java虚拟机(JVM)独立的,即一个平台上序列化的对象可以在另一个完全不同的平台上反序列化该对象。
ObjectInputStream和ObjectOutputStream类是高层次的数据流,包含反序列化和序列化对象的方法。
一个类的对象要想序列化成功,需满足两个条件:

  1. 该类必须实现java.io.Serializable接口(序列化接口中没有方法和属性,仅用于表示可序列化)。
  2. 该类的所有属性必须是可序列化的。若有属性不是可序列化的,则该属性必须注明是短暂(transient)的。

序列化对象

ObjectOutputStream类用来序列化一个对象。
当序列化一个对象到文件时,按照java的标准约定是给文件一个.ser扩展名。

package binaryheap.test;import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;public class BH{public static void main(String[] args) {Student student = new Student();student.address = "shenyang";student.age = 12;student.name = "TxL";student.number =  423;student.ssn = 123456;try {File file = new File("D:/serializable.ser");FileOutputStream fos = new FileOutputStream(file);ObjectOutputStream ooStream = new ObjectOutputStream(fos);ooStream.writeObject(student);ooStream.close();fos.close();} catch (Exception e) {e.printStackTrace();}   }
}class Student implements Serializable{public String name;public String address;public int number;public int age;public transient int ssn;public void mail() {System.out.println("Mailing to " + name + " " + address);}
}

将对象序列化到了一个.ser文件中。

反序列化对象:

package binaryheap.test;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;public class BH{public static void main(String[] args) throws IOException, ClassNotFoundException {Student s = null;try {FileInputStream fin = new FileInputStream("D:/serializable.ser");ObjectInputStream ois = new ObjectInputStream(fin);s = (Student)ois.readObject();ois.close();fin.close();} catch (FileNotFoundException e) {e.printStackTrace();}System.out.println("s.address:  " + s.address);System.out.println("s.age:  " + s.age);System.out.println("s.name:  " + s.name);System.out.println("s.number:  " + s.number);System.out.println("s.ssn:  " + s.ssn);}
}class Student implements Serializable{public String name;public String address;public int number;public int age;public transient int ssn;public void mail() {System.out.println("Mailing to " + name + " " + address);}
}

结果

s.address:  shenyang
s.age:  12
s.name:  TxL
s.number:  423
s.ssn:  0

如果JVM在反序列化对象的过程中找不到该类,则抛出ClassNotFooundException异常。
注意:readObject返回的对象为Object类型,需要强制转换。transient修饰的值没有被发送到输出流。所以,反序列化后,为0。

JAVA SE (14)相关推荐

  1. Java安装与环境配置(Java SE 14)

    Java(Java SE 14)安装与环境配置 前言 Java SE 14 下载 Java安装(新老版Java有区别,这里要看) Java配置 1.右击此电脑,打开属性.(不同的电脑,可能略有不同,可 ...

  2. java se 14 虚拟机规范

    https://cr.openjdk.java.net/~iris/se/14/latestSpec/java-se-14-jvms-diffs.pdf 只有链接,pdf

  3. idea构建gradle项目报错Could not target platform: ‘Java SE 14‘ using tool chain: ‘JDK 8 (1.8)‘.

    原因是以下两个配置不一致 build.gradle中的sourceCompatibility = '14' 如图 jdk版本改为一致即可

  4. 【JAVA SE】第一章 Java语言概述、环境变量和HelloWorld

    第一章 Java语言概述.环境变量和HelloWorld 文章目录 第一章 Java语言概述.环境变量和HelloWorld 一.Java语言概述 1.Java简介 2.Java发展历史 3.Java ...

  5. Java 版本变更列表 (Java SE 8 ~ Java SE 18 )

    java 版本变更列表 Java SE 8 Java SE 9 Java SE 10 Java SE 11 Java SE 12 Java SE 13 Java SE 14 Java SE 15 Ja ...

  6. 零基础学JAVA]Java SE基础部分-01. Java发展及JDK配置

    1.课程名称:Java发展及JDK配置 本季介绍了JAVA的发展过程,包括JDK的发展历程,path路径的配置和classpath的配置及作用.并简单讲解了一个简单的JAVA程序,并通过此程序讲解了J ...

  7. java se翻译_(翻译)Java SE 8 Lambda 标准库概览(下)

    Java SE 8 Lambda 标准库概览 8,Collectors 在目前的例子中,我们已经使用了collect()方法来收集流中的元素并放入List或Set中了.collec()方法的参数是一个 ...

  8. Java SE 6 新特性 Instrumentation 新功能

    系列内容: 此内容是该系列的一部分:Java SE 6 新特性 Instrumentation 简介 利用 Java 代码,即 java.lang.instrument 做动态 Instrumenta ...

  9. Java SE 11(18.9)中的API更新

    Java SE 11也被命名为18.9(基于使用发布年份和月份的新命名方案),预计将在9月的最后一周发布GA. 频繁发布新JDK版本的新方法是允许语言创建者引入新功能,并向开发人员社区更快地进行API ...

最新文章

  1. Shell脚本入门基础
  2. 使用fastcoll进行md5碰撞,两个不同的文件md5值一样。
  3. vue3源码中的最长递增子序列
  4. JDE Client开发端 左侧边栏设置
  5. php实现注册登陆验证
  6. js字符串转数字(小数),数字转字符串
  7. meteor 结合mysql_Meteor集合
  8. Is It A Tree?(hdu1325)
  9. 关于selenium关闭chrome密码登录时弹出的密码提示框
  10. Akka向设备组添加Actor注册《thirteen》译
  11. oracle odi 目标数据存储: 临时目标数据存储未与连接关联,ODI知识模块--IKM Oracle Incremental Update...
  12. 10款最赞的ROS机器人操作系统课程+为何ROS不是必须的
  13. 《Spring Cloud微服务实战》翟永超(著)
  14. 程序员:新手到专家的5个阶段
  15. 数据分析基础学习_Matplotlib_常见图形及绘制(折线图/散点图/柱状图/直方图/饼图)
  16. ABP框架系列之三十:(Javascript-API-Javascript-API)
  17. c语言如何解超越方程
  18. javascript数组 去重
  19. windows窗口置顶--Windows on Top
  20. Codeforces Raif Round 1 (Div. 1 + Div. 2) E. Carrots for Rabbits(贪心)

热门文章

  1. 防老人走失新方法:衣服上缝二维码 走失可扫码回家
  2. Data Mining Machine Learning学习笔记 机器学习入门笔记 之jieba分词(中文分词)(二)
  3. VB .bas文件生成dll并且调用
  4. 【C语言】练习函数调用
  5. U-Boot命令使用
  6. Java 连接数据库的几种方法
  7. 堪称「神器」的电脑软件
  8. Unreal Engin_画廊制作笔记 _010给墙画添加灯光
  9. 微信公众平台支付 一直提示签名认证失败,签名对比正确,却提示签名不正确,关于prepay_id造成签名验证不正确的问题
  10. 第15课:生活中的命令模式——大闸蟹,走起