序列化和反序列化的学习

文章目录

  • 序列化
    • 构造方法
    • 方法
    • 使用步骤
  • 反序列化
    • 构造方法
    • 方法
    • 使用步骤

序列化

把内存中的对象以流的方式写入到文件中,这叫序列化,也叫“写对象”
使用 ObjectOutputStream 写入对象中的数据,这个流叫对象字节输出流,也叫对象的序列化流。

public class ObjectOutputStream extends OutputStream implements ObjectOutput, ObjectStreamConstants

要进行序列化和反序列化的类必须实现 Serializable 接口,就会给类添加一个标记。序列化和反序列化时,会检测类是否有此标记,有则可以顺利序列化和反序列化,否会抛出异常。

Serializable 也叫标记(标识)接口。

不声明任何方法的接口叫标识(标记)接口。

构造方法

ObjectOutputStream(OutputStream out),创建写入指定 OutputStream 的 ObjectOutputStream。

方法

public void writeObject(Object obj),将对象写入到此输出流中,即将指定的对象写入到 ObjectOutputStream 中

使用步骤

1.创建 ObjectOutputStream 对象,构造方法中传递一个字节输出流对象
2.使用 ObjectOutputStream 对象的方法 writeObject,将指定的对象写入到文件中
3.释放资源

反序列化

把文件中保存的对象数据,以流的方式读取到内存中(程序需要使用),叫反序列化,也叫“读对象”。
使用 ObjectInputStream 流对象来读取数据,这个流叫对象输入字节流,也叫对象的反序列化流。

ObjectInputStream 反序列化流,将之前使用 ObjectOutputStream 序列化的数据恢复为对象。

public class ObjectInputStream extends InputStream implements ObjectInput, ObjectStreamConstants

构造方法

ObjectInputStream(InputStream in),创建一个从指定的字节输入流读取的 ObjectInputStream 对象

方法

public Object readObject(),从 ObjectInputStream 读取对象

使用步骤

1.创建 ObjectInputStream 对象,构造方法中传入一个字节输入流对象
2.使用 ObjectInputStream 对象的方法 readObject 读取数据,实际是读取 ObjectInputStream 对象中的缓冲区中的数据,而缓冲区的数据是由 InputStream 对象读取文件数据到缓冲区中
3.释放资源
4.使用对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java开发展望怎么写_Java开发趋势:2019年展望

java开发展望怎么写在这篇文章中,我们将发表一篇有关2019年Java开发趋势的综合文章。您是否知道Java自上世纪问世以来,现在已在100亿个设备上运行 ? 它是数十年来最受欢迎的编码语言,但是在最近几个月中,Java经历了一些…

dml语句包括哪些_MySQL数据操作(DML)语句,入门掌握这些足够了

DML是(Data Manipulation Languages)数据定义语言的缩写主要包括表记录的插入insert、更新update、删除select插入记录insert into table(field1,field2,...fieldn) values(value1,value2,...value)如:向表 emp 中插入以下记录:---------------------------| ename …

Servlet 的实例对象

Servlet 实例是由 Servlet 容器自动创建,也可以说是由 Web Server 创建的。 当请求到达服务器的时候,或者在 web.xml 中配置了 init 方法的时候,容器就会自动创建 Servlet 实例。 如果在 web.xml 中配置了 init 方法,那么启动服…

java 手动装箱拆箱对象_将旧对象装箱可自动关闭

java 手动装箱拆箱对象从Java 7开始,我们可以使用try-with-resources并自动关闭任何实现Autocloseable接口的对象。 如果资源是 Autocloseable 。 一些类需要一些总结,但不是Autocloseable 。 这些主要是某些遗留框架中的旧类,仍然妨碍我们前…

delphi查看源码版本_[Mybatis]-IDEA导入Mybatis源码

该系列文章针对 Mybatis 3.5.1 版本一、下载 Mybatis 源码step1、下载 Mybatis-3.5.1 源码Mybatis 源码仓库地址下载版本信息如下:下载后进行解压,并打开 pom 文件,查看pom 中的父级依赖,如下:根据上述版本信息&#x…

Struts项目中,检测用户名是否被占用/查询账户名称是否被占用/查询账户名称是否已被注册/检查用户名是否被注册

在客户端无法检测注册用户名是否被占用,这需要查询数据库,所以是服务器端负责这块。 实现思路大致描述: 注册表单中添加自动检测用户名是否被占用的功能,其实就是利用 ajax 向服务器发送请求,并带着用户输入的用户名过…

羽毛球双打区域_测试双打简介

羽毛球双打区域当您编写单元测试时,您会遇到许多协作者,而且他们都有非常特殊的行为,知道在正确的时间必须使用哪种测试两倍可以使您的生活更轻松。 假 第一个是Dummy对象,它是最简单的一个,Dummy只是您为满足构造函数…

可为空的对象必须具有一个值_前端:这里有8个常见的JavaScript经典问题,总有一个你不会的...

参考前端小智:https://juejin.im/post/5d2d146bf265da1b9163c5c91.了解函数提升使用var关键字声明的变量在JavaScript中会被提升,并在内存中分配值undefined。 但初始化恰发生在你给变量赋值的地方。 另外,var声明的变量是函数作用域的&#…

Struts2的配置文件struts.xml详解

<?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"> <struts><!-- 所有匹…

hibernate教程_Hibernate多对多教程

hibernate教程介绍&#xff1a; 在本教程中&#xff0c;我们将学习使用Hibernate ManyToMany注释定义和使用多对多实体关联。 上下文构建&#xff1a; 为了继续学习本教程&#xff0c;我们假设我们有两个实体– 雇员和资格&#xff1a; 众所周知&#xff0c;一名员工可以拥有…

python常用命令格式_python常用命令有哪些

原标题&#xff1a;python常用命令有哪些 Python是一种计算机程序设计语言。是一种动态的、面向对象的脚本语言。它包含了许多命令来帮助我们实现各种各有的功能&#xff0c;接下来在文章中为大家分享【推荐课程&#xff1a;Python教程】 &#xff08;1&#xff09;打开csv文件…

java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.LoopTag

开发工具&#xff1a;IntelliJ IDEA for Mac 开发项目&#xff1a;struts2-demo 构建工件&#xff1a;Maven 问题描述&#xff1a;在 jsp 中使用了 jstl 标签 <c:forEach>&#xff0c;浏览器访问 Action 组件提示错误&#xff1a; java.lang.ClassNotFoundException: ja…

latex 多行公式_Markdown中输入多行并列的公式

本篇旨在以两个Markdown文件编辑器-Typora与Visual Code Studio为例&#xff0c; 说明对于多行并列公式不同的处理方式。Latex中输入多行并列公式在latex文件编辑器中使用align环境输入多行并列的公式&#xff0c; 如下例&#xff1a;begin{align} x & v_0costheta t y &am…

java 常规类的可见性_Java 12常规可用性

java 常规类的可见性马克雷因霍尔德&#xff08;Mark Reinhold&#xff09; 今天宣布 &#xff0c;“ Java 12的参考实现JDK 12现在已全面上市。” Reinhold在该公告中指出&#xff0c;“可以从https://jdk.java.net/12获得来自Oracle的GPL许可的OpenJDK构建&#xff0c;并且“…

python支持复数以及相关的运算吗_Python: 复数的数学运算

写的最新的网络认证方案代码遇到了一个难题&#xff0c;唯一的解决办法就是使用复数空间&#xff0c;需要使用复数来执行一些计算操作。 复数可以用使用函数complex(real, imag) 或者是带有后缀j 的浮点数来指定。 比如&#xff1a; >>> a complex(2, 4) >>>…

分页查询的实现(struts2+jsp+jstl+el)

文章目录MySQL的分页查询语句如何设置《上一页》和《下一页》的有效性呢&#xff1f;示例代码MySQL的分页查询语句 使用 MySQL 的分页查询语句 select * from project limit 5,5&#xff0c;打开表 project&#xff0c;获取全部记录&#xff0c;只要第 5 条记录后的 5 条记录&…

junit 测试执行顺序_JUnit 5中的测试执行顺序

junit 测试执行顺序一般实践认为&#xff0c;自动化测试应能够独立运行且无特定顺序&#xff0c;并且测试结果不应依赖于先前测试的结果。 但是在某些情况下&#xff0c;可以证明特定的测试执行顺序是正确的&#xff0c;尤其是在集成或端到端测试中。 默认情况下&#xff0c;在…

python的起源和发展_Python入门第一课——Python的起源、发展与前景!

我们在做任何一件事情之前&#xff0c;我们都会通过各种渠道去搜集事情的信息&#xff0c;了解事情的来龙去脉&#xff0c;学习一门编程语言也是如此&#xff0c;只有知根知底&#xff0c;我们才能有明确的方向和目标&#xff0c;以及底气去完成这件事情&#xff0c;今天我带大…

MySQL分页查询语句

单表分页查询语句&#xff1a; select * from tbl_name limit start_index, rows_per_page&#xff1b;start_index&#xff1a;每页数据的起始行的索引值&#xff0c;行的索引值从 0 开始 rows_per_page&#xff1a;每页显示的行数 page_num&#xff1a;查询的页码 关系式&a…