序列化和反序列化是什么?Java中实现Serializable接口的代码实例

news2024/11/24 3:56:43

序列化和反序列化是编程处理对象数据的重要概念,特别是在数据存储、网络通信和分布式系统中。

序列化是指将程序中的对象(如数据结构、类实例等)的状态信息转换为可以存储或传输的格式的过程。这个过程会将对象的公共和私有字段(包括对象的属性、方法等)转化为一个字节流(或其他格式,如字符串),使得这个对象可以被写入磁盘文件、通过网络发送,或者以其他方式存储。序列化的目的在于保留对象的状态,以便是未来某个时刻可以恢复这个对象到完全相同的状态。

反序列化则是序列化过程的逆操作,它将序列化的数据格式转换为原来对象的过程。通过读取并解析序列化的数据,系统能够重建对象实例,并恢复其在序列化时的状态。

序列化和反序列化应用:

  • 持久化存储:将对象状态保存到磁盘,用于长期存储或稍后恢复。
  • 网络通信:在分布式系统或客户端-服务器模型中,对象需要通过网络发送给另一方,序列化使得对象能够以字节流的形式在网络上进行高效、无损的传输。
  • 进程间通信:在同一个系统内的不同进程之间交换对象时,也需要序列化和反序列化。
  • 缓存:将对象序列化后存储在内存或外部缓存系统中,以提高数据访问速度。

目录

1、创建一个可序列化的类

2、序列化对象到文件

3、反序列化对象


在Java中,序列化和反序列化通过实现Serializable接口完成,下面是一个简单示例:

1、创建一个可序列化的类

在pojo包下定义一个简单的User实体类,并实现Serializable接口。这个接口是一个标记接口,标志着一个类的对象是可以被序列化的。

public class User implements Serializable {
    private String name;
    private int age;


    public User() {
    }

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    public String toString() {
        return "User{name = " + name + ", age = " + age + "}";
    }
}

2、序列化对象到文件

编写一个方法来序列化User对象

public class SerializableTest {
    // 序列化是指将程序中的对象的状态信息转换为可以存储或传输的格式的过程
    public static void main(String[] args) {
        User user = new User("shang", 21);

        ObjectOutputStream oos = null;
        try {
            oos = new ObjectOutputStream(new FileOutputStream("d:/user.ser"));
            oos.writeObject(user);
            System.out.println("序列化对象到文件");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

这段代码创建 了一个User对象,并使用ObjectOutputStream将其序列化到名为"user.ser"的文件中。

3、反序列化对象

编写一个方法来从文件中反序列化这个对象

public class DeserializationTest {
    public static void main(String[] args) {
        try {
            //从磁盘读取文件
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d:/user.ser"));
            User user = (User) ois.readObject();
            System.out.println("user = " + user);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
}

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

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

相关文章

Tomcat端口占用解决方案

Windows操作系统 出现这种情况: Error was Port already in use :40001;nested exception is :java.net.BindException: Address already in use : JVM_Bind; 步骤1:按下winR键,输入cmd 步骤2:输入以下命令 netstat …

R语言【Tidyverse、Tidymodel】机器学习

机器学习已经成为继理论、实验和数值计算之后的科研“第四范式”,是发现新规律,总结和分析实验结果的利器。机器学习涉及的理论和方法繁多,编程相当复杂,一直是阻碍机器学习大范围应用的主要困难之一,由此诞生了Python…

set-cookie字段,cookie文件介绍+原理,如何查看cookie文件,在基于http协议服务器的代码实现,cookie存在问题+解决(会话机制)

目录 Set-Cookie 引入 介绍 原理 描述 图解 保存"cookie文件"的方法 内存级 文件级 查看cookie文件 示例 实现 介绍 代码 核心代码 全部代码 示例 cookie存在的问题 介绍 存在的必要性 如何解决 问题梳理 引入 会话机制 -- 解决信息泄漏…

UART、TIMER

UART简介(通用异步收发器,通常称串口) UART,是一种串行、异步、全双工的通信协议,在嵌入式领域应用的非常广泛。 UART作为异步串行通信协议的一种,工作原理是将传输数据的每个二进制位一位接一位地传输。…

谷歌开源!用 js 编写 Shell 脚本! | 开源日报 No.247

google/zx Stars: 41.4k License: Apache-2.0 zx 是一个用于编写更好脚本的工具。 提供有用的包装器,简化了对 child_process 的操作转义参数并提供合理的默认值使用 JavaScript 编写复杂脚本时比 Bash 更方便可以直接使用 npm 安装 dani-garcia/vaultwarden St…

72207-80-8,Epoxide-PEG-Epoxide是一种具有两个环氧基团的线性双功能PEG(聚乙二醇)试剂

【试剂详情】 英文名称 Ep-PEG-Ep,Epoxide-PEG-Epoxide 中文名称 环氧基-聚乙二醇-环氧基,聚乙二醇二缩水甘油醚 CAS号 72207-80-8 外观性状 由分子量决定,固体或者液体。 分子量 0.4k,0.6k,1k,2k…

(自适应手机端)物流运输快递仓储网站模板 - 带三级栏目

(自适应手机端)物流运输快递仓储网站模板 - 带三级栏目PbootCMS内核开发的网站模板,该模板适用于物流运输网站、仓储货运网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可;自适应手机端,同一个后台…

CSS-背景属性

目录 背景属性 background-color (背景颜色 ) background-image (背景图片 ) background-repeat (背景图平铺方式 ) no-repeat 不平铺 repeat-x 水平方向平铺 repeat-y 垂直方向平铺 repeat 平铺 background-position (背景图位置) background-size (背景缩…

电脑内存不足怎么清理?教你3招轻松解决

电脑内存不足是影响电脑性能的常见问题之一,它会导致电脑运行缓慢、应用程序响应迟钝等情况。为了解决这个问题,需要对电脑内存进行清理和优化。本文将介绍电脑内存不足怎么清理的三种方法,帮助您提高电脑性能。 方法1:清理临时文…

一文搞懂SSL证书收费与免费选择攻略

在互联网技术高速发展的今天,网络安全问题已经成为企业和个人不可忽视的重要议题。SSL(Secure Sockets Layer)证书,作为一种安全协议,能够为网站提供加密通信,确保数据的传输过程中不被窃取或篡改&#xff…

荟敏堂·中医优势专科建设新质生产力发展论坛在京召开

原题:《荟敏堂中医优势专科建设新质生产力发展论坛在京召开——周超凡中医治则学思想传承研讨会成功举办》 会议现场照片 仟江水商业电讯(5月8日 北京 委托发布)日前,周超凡中医治则学思想传承研讨会暨中医优势专科建设新质生产力…

HTTP免费升级到HTTPS攻略

HTTPS就是在HTTP的基础上加入了SSL,将一个使用HTTP的网站免费升级到HTTPS的关键就是申请一个免费的SSL证书 具体步骤如下 1 获取免费SSL证书 国内的JoySSL 提供不限量免费的SSL/TLS证书。根据自己的需求选择证书类型(登录JoySSL官网,创建账号…

如何看待2024数维杯?

一、赛事介绍 美赛结束后,2024年又一场高含金量数模竞赛开始报名啦!数维杯每年上半年为数维杯国赛(5月,俗称小国赛),下半年为数维杯国际赛(11月),累计参赛高校千余所,参赛人数超14万人,经过八年多的发展,已成为继数学建模国赛和美赛之后的第三大全国性数学建模赛事,…

UE灯光:点光和聚光灯的强度单位(cd、lm)

在虚幻引擎(UE)中,点光和聚光灯的光强使用两种不同的单位进行度量: 坎德拉(cd):坎德拉是光强度的国际单位(SI单位)。它代表光源在特定方向上每单位立体角发出的光通量。…

融知财经:期权期货及其他衍生产品

期权、期货及其他衍生产品是金融市场中用于管理风险和进行投机的金融工具。这些衍生产品的价值依赖于一个或多个基础资产,如股票、商品、利率、汇率等。以下是关于这些衍生产品的一些基本介绍: 1、期货(Futures):期货是…

亚马逊夏季热销爆款盘点!2024跨境选品出海风向看这里!

随着夏日的脚步渐近,夏季购物热潮即将掀起。这正是我们更新产品列表、上架最热门夏季商品的绝佳时机。基于对2023年夏季亚马逊销售数据的深入分析,预测以下这些商品在2024年夏天依然极有可能成为跨境卖家热销爆品。 一、女士夏季连衣裙 首先&#xff0…

浅谈ps/2键盘

文章目录 说明基础知识操作系统中断类型工作机制优点应用 CPU对IO设备的轮询机制轮询机制的工作原理轮询机制的特点轮询机制的优、缺点与中断机制的对比 N-Key Roller(全键无冲)应用领域实现原理技术限制 PS/2接口简介USB设备&PS/2设备的工作机制PS/…

XSS、CSRF、SSRF漏洞原理以及防御方式_xss csrf ssrf

这里写目录标题 XSS XSS攻击原理:XSS的防范措施主要有三个:编码、过滤、校正 CSRF CSRF攻击攻击原理及过程如下:CSRF攻击的防范措施: SSRF SSRF漏洞攻击原理以及方式SSRF漏洞攻击的防范措施 XMLXSS、CSRF、SSRF的区别 XSS、CSRF的…

MySQL mydumper工具

目录 1. mydumper介绍 2. mydumper参数解释 3. 备份例子 3.1 备份全库(未包含其他) 3.2 备份全库(包含其他) 3.3 备份指定数据库(-B或--database) 3.4 导出指定表(-T或--tables-list) 3.5 只导出表结构,不导出表数据(-d或--no-data) 3.6 只导出表数据&#…

Cloudera的简介及安装部署

简介 Cloudera是一家位于美国的软件公司,成立于2008年,专注于为企业客户提供基于Apache Hadoop的软件、支持、服务以及培训。Cloudera的开源Apache Hadoop发行版,即Cloudera Distribution including Apache Hadoop(CDH&am…