Java8基础之Serializable接口

2023-10-27

Serializable接口介绍

Serializable 是 java.io 包中定义的、用于实现 Java 类的序列化操作而提供的一个语义级别的接口。Serializable 序列化接口没有任何方法或者字段,只是用于标识可序列化的语义。实现了Serializable接口的类可以被 ObjectOutputStream 转换为字节流,同时也可以通过 ObjectInputStream 再将其解析为对象。例如,我们可以将序列化对象写入文件后,再次从文件中读取它并反序列化成对象。简单说就是为了保存在内存中的各种对象的状态(也就是实例变量),并且可以把保存的对象状态再读出来。

序列化是指把对象转换为字节序列的过程,我们称之为对象的序列化,就是把内存中的这些对象变成一连串的字节(bytes)描述的过程。
而反序列化则相反,就是把持久化的字节文件数据恢复为对象的过程。

serialVersionUID 介绍

对于 JVM 来说,要进行持久化的类必须要有一个标记,只有持有这个标记 JVM 才允许类创建的对象可以通过其 IO 系统转换为字节数据,从而实现持久化,而这个标记就是 Serializable 接口。而在反序列化的过程中则需要使用 serialVersionUID 来确定由那个类来加载这个对象,所以我们在实现 Serializable 接口的时候,一般还会去显示地定义 serialVersionUID。在反序列化的过程中,如果接收方为一个类的对象声明,如果该对象的 serialVersionUID 与待反序列化的对象不同,那么反序列化的过程中将会导致InvalidClassException异常。

代码

Person类

import java.io.Serializable;

public class Person implements Serializable {

    private static final long serialVersionUID = 8241970228716425282L;
    
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person [name=" + name + "]";
    }
}

测试类

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class Test {

    public static void main(String[] args) {
        Person p = new Person();
        p.setName("feige");
        writeObj(p);
        
        Person p2 = readObj();
        System.out.println(p2);
    }
    
     // 序列化
    public static void writeObj(Person p) {  
        try { 
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("E://1.txt")); 
            objectOutputStream.writeObject(p); 
            objectOutputStream.close(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
    } 

    // 反序列化 
    public static Person readObj() { 
        Person p = null;
        try { 
            ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("E://1.txt")); 
            try { 
                p = (Person)objectInputStream.readObject(); 
            } catch (ClassNotFoundException e) { 
                e.printStackTrace(); 
            } 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
        return p;
    } 
}

控制台输出:Person [name=feige]

转载于:https://www.cnblogs.com/feiqiangsheng/p/11077355.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java8基础之Serializable接口 的相关文章

  • 通过 SSH 隧道远程访问 MySQL 数据库

    我正在尝试编写 Java 程序来使用 ssh 隧道访问远程 mySQL 数据库 下面是我的代码 int lport 5656 int rport 3306 String rhost 111 222 333 444 String host 1
  • 如何使用 IO Codenameone 发布图片/图像

    因为 codenameone 不能使用外部库 HttpConnection 所以我必须使用 Codenameone 提供的内部库 API 只是我已经设法使用 ConnectionRequest 将数据发布到格式化文本 字符串 我想知道是否有
  • Java Arraylist of object 按日期从数组列表中删除元素

    这是我的数组列表 ArrayList
  • 如何以编程方式检查应用程序是否在调试模式下运行?

    我必须在应用程序中的某个位置确定我的应用程序是在调试模式还是实时模式下运行 是否有任何函数或代码可用于检查 在开 关两种情况下都会返回 true false 如果是这样 请帮助我 提前致谢 从问题中尚不清楚调试模式是否指的是 应用程序是否可
  • 面试问题 - 在排序数组 X 中搜索索引 i,使得 X[i] = i

    昨天面试时 我被问到了以下问题 考虑一个 Java 或 C 数组X它已排序并且其中没有两个元素是相同的 如何最好地找到索引i这样该索引处的元素也是i 那是X i i 作为澄清 她还给了我一个例子 Array X 3 1 0 3 5 7 in
  • lombok - 多个镜头中的 @Builder 模式

    I use Builder of 龙目岛项目 https github com rzwitserloot lombok 所以考虑我有这个例子 Builder public class Client private Getter Setter
  • C# 中的 Culture 相当于 Java 中的 Locale 吗?

    C 使用文化的概念 这在操作上与 Java 中的 Locale 类似吗 或者底层概念是否存在显着差异 从文化而不是语言环境的角度进行工作是一种寻找正确抽象层次的尝试 从以类似方式做事的人群的角度来考虑事物 而不是谈论地理区域和语言 并有点疯
  • 用户“root”@“localhost”的访问被拒绝

    我正在尝试从数据库中获取记录 但我面临这个访问被拒绝的问题 我尝试了 Stack Overflow 上提到的其他解决方案 例如向用户授予权限 但没有任何效果 访问数据库的代码 public void service HttpServletR
  • 带有 spring-kafka 的 Kafka 死信队列 (DLQ)

    最好的实施方式是什么死信队列 DLQ Spring Boot 2 0 应用程序中的概念 使用 spring kafka 2 1 x 来处理无法处理的所有消息 KafkaListener某些bean发送到某些预定义的Kafka DLQ主题的方
  • 如何在 Android 中将 EditText 绘制到画布上?

    我想画画 EditText username new EditText context 到我画布上的特定位置 protected void onDraw Canvas canvas 是否可以在基础上画出x y在我的 Java 文件中协调而不
  • Java HttpURLConnection:内容长度计算

    我目前正在为 bitbucket issues RESTful API 开发一个库 我取得了很大的进步 现在我要解决这个部分更新问题 http confluence atlassian com display BBDEV Issues Is
  • 小米和oppo等中国ROM上的工作管理器,在电池优化时,将工作的计划延迟增加几个小时

    小米和 Oppo 等中国 ROM 上的工作管理器在进行电池优化时 会将计划的工作延迟增加几个小时 但是 我注意到一些应用程序即使在电池优化下也能够让计划的作业安静地完美运行 我注意到的一个区别是 它们每次运行作业时都会显示一条通知 那么这是
  • 如何在最短的时间内克隆java中的输入流

    有人可以告诉我如何克隆输入流 并花费尽可能少的创建时间吗 我需要多次克隆输入流以使用多种方法来处理 IS 我尝试了三种方法 但由于这样或那样的原因 事情不起作用 方法 1 感谢 stackoverflow 社区 我发现以下链接很有帮助 并将
  • java3d 中的面部着色

    使用java3d 如何不在每个顶点基础上着色 而是在每个面基础上着色 我尝试学习 java3d 但我生成的 Shape3d 看起来并不符合预期 我想用不同的颜色给不同的三角形着色 但我不知道该怎么做 纹理看起来有点大材小用 而且我根本没有掌
  • JFreeChart MeterPlot

    我目前正在用java做Agent项目 在某些时候 我需要显示一个仪表 例如 电池电量 我的程序中有 5 个代理 每个代理都会创建自己的带有名称的仪表图 但不知何故他们没有更新数据集 或者他们正在更新数据集 只是它没有显示在仪表图上 任何想法
  • 用于将字符串与通配符模式进行匹配的递归函数

    所以我一整天都在试图解决这个作业 只是无法完成 以下函数接受 2 个字符串 第二个 不是第一个 可能包含 的 星号 An 是字符串的替换 空 1个字符或更多 它可以出现 仅在s2中 一次 两次 更多或根本不出现 它不能与另一个相邻 ab c
  • Spring Boot 健康执行器 - 什么时候上线?

    我找不到任何有关 Springs Health Actuator 何时返回 UP 状态的文档 你能依靠一切吗 Components正在初始化 会不会 Controller准备好满足请求了吗 为了测试应用程序上下文是否已加载 您可以执行此自定
  • 如何使用自定义转换器访问 jOOQ 生成的例程字段作为值?

    我在访问生成例程的字段时遇到问题PL pgSQL 用户定义函数 返回JSON 数据类型结果 已经提到this https stackoverflow com q 62535195 6805866问题 这是我的结果get all orders
  • Spring Data JPA 和 Exists 查询

    我正在使用 Spring Data JPA 使用 Hibernate 作为我的 JPA 提供程序 并想要定义一个exists附加 HQL 查询的方法 public interface MyEntityRepository extends C
  • 如何在 SpringDoc OpenAPI 3 中引用文件?

    我有 Spring Boot 项目 我想在其中记录我的 API 这里是正在处理的 Web 服务的示例 ApiResponses value ApiResponse responseCode 200 content Content media

随机推荐

  • 工资计算(C++)

    问题描述 有一个工厂有三类人 固定工资工人A 计件工人B 计时工人C 构建基类 工厂员工Worker类 包括三个成员数据 名字name 字符串string 住址address 字符串string 工资salary long int 包括成员
  • 即时通讯源码/im源码uniapp基于在线聊天系统附完整搭建部署教程

    即时通讯im源码 Instant Messaging System 是个基于uniapp项目 我们在其中使用了许多uniapp服务 这个纡AWS云的项目 我们为想要学习uniapp和云计算的学生开发 我们将提供部署说明以及uniapp即时消
  • Flutter状态管理之Provider的使用

    当App的复杂性发展到一定程度 经常会出现一个页面中不同深度的子Widget需要共享访问同一个数据状态 甚至不同页面要共享同一个状态 这时我们就会想到InheritedWidget InheritedWidget是 Flutter 中非常重
  • java实现二维码生成功能

    1 由来 由于现在对二维码的使用比较多 正好我在项目里面也使用到了 所以写篇博客记录一下 2 引入依赖
  • 选择刷脸支付便是选择明日支付主流

    刷脸支付国家政府支持发展 两大支付巨头强力推广 大众期盼投入 未来几年的支付方式发展主题 都将以刷脸支付为主旋律 大势所趋下 刷脸支付项目将成为最抢手的支付项目 选择刷脸支付 便是选择明日支付主流 移动支付市场洗牌 未来 刷脸支付定天下 现
  • vscode中mmgeneration的分布式训练的调试文件设置

    受知乎博主的启发 没弄软连接 直接把launch py的路径放到了program参数中了 还需要把train py中的参数设置为默认值 launch json文件的代码 使用 IntelliSense 了解相关属性 悬停以查看现有属性的描述
  • MYSQL存储结构

    前言 需要提前了解B树 B 树特性 目录 MYSQL的数据结构 主索引 辅助索引 通过索引查询数据时出现的关键词 MYSQL的数据结构 MYSQL数据选用B 树结构存储数据 示例表 create table users id int nam
  • Delphi 如何GET/POST 调用HTTP请求

    转载地址 https www cnblogs com limingliyu archive 2016 07 03 5638966 html HTTP请求的GET方法 procedure GetDemo var IdHttp TIdHTTP
  • Postman使用_加密操作

    MD5加密 let token CryptJS MD5 文本内容 toString SHA256加密 let token CryptJS SHA256 文本内容 toString
  • Angular的后院:组件依赖关系的解决

    by Dor Moshe 通过Dor Moshe Angular的后院 解决 组件依赖关系 Angular s Backyard The Resolving of Components Dependencies This article o
  • mac 安装 JDK

    下载jdk rpm jdk 8u65 macosx x64 dmg 按照提示安装 实标上 我们只是把JDK1 8的文件复制到操作系统上 但是我们如果要在terminal终端上使JAVA命令 还有让其实应用知道JDK1 8环境的存在 那我们还
  • echart的使用

    一 echarts的通用配置 想要设置图表的在窗口的位置 必须设置图表盒子的位置 也必须设置盒子的长度和宽度来容纳echart图像 1 title属性 1 文字样式textStyle 2 标题边框 borderWidth borderCol
  • 宝塔面板SSL证书文件存放目录位置在哪里?

    宝塔面板SSL证书文件存放目录位置在哪里 宝塔面板网站安装SSL证书后 SSL证书文件存放在哪那个目录下 赵一八笔记分享宝塔面板SSL证书文件存放目录位置 宝塔SSL证书所在目录 SSL证书目录 www server panel vhost
  • 第二章——开始学习C++

    进入C 首先介绍一个显示消息的简单C 程序 不同于以往的 Hello world include
  • Matter 仓库介绍

    1 connectedhomeip spechttps github com CHIP Specifications connectedhomeip spec 此仓库为Matter规范技术文档 specifications 采用 Ascii
  • cmd如何返回上一级目录,如何进入其他文件目录

    当我们打开cmd或者composer运行命令时都会进入一个默认文件目录 那么cmd该如何返回上一级目录 和如何进入其他文件目录运行命令呢 具体方法如下图所示 1 在默认的命令后加 cd 即可返回上一级目录 2 cmd进入其他文件目录 2 1
  • 基于.net平台常用的框架整理

    分布式缓存框架 Microsoft Velocity 微软自家分布式缓存服务框架 Memcahed 一套分布式的高速缓存系统 目前被许多网站使用以提升网站的访问速度 Redis 是一个高性能的KV数据库 它的出现很大程度补偿了Memcach
  • 若依后台管理系统学习

    前端系统是指运行在浏览器或者移动设备上的用户界面层 它负责与用户交互 展示数据 调用后端服务等 前端系统的架构设计需要考虑以下几个方面 前端系统在整个系统中的位置和关系 你需要明确前端系统与后端服务 数据库 第三方接口等的架构上的关系 业务
  • requests模块----这是一个强硬的手段,有多强呢?看看你就知道了

    目录 requests的作 发送简单的get请求 发送带header的请求 发送POST请求 cookies参数的使 cookie和session区别 使 代理 设置请求超时时间 请求SSL证书 开始了 requests模块简单介绍 1 r
  • Java8基础之Serializable接口

    Serializable接口介绍 Serializable 是 java io 包中定义的 用于实现 Java 类的序列化操作而提供的一个语义级别的接口 Serializable 序列化接口没有任何方法或者字段 只是用于标识可序列化的语义