Java 对象序列化

news2024/11/23 21:01:29

序列化:把对象转化为可传输的字节序列过程称为序列化。

反序列化:把字节序列还原为对象的过程称为反序列化

序列化的作用是方便存储和传输,细节可参考如下文章:

序列化理解起来很简单 - 知乎序列化的定义 序列化:把对象转化为可传输的字节序列过程称为序列化。 反序列化:把字节序列还原为对象的过程称为反序列化。为什么要序列化?如果光看定义我想你很难一下子理解序列化的意义,那么我们可以从另一个…icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/40462507

直接写代码:

import java.io.*;

// 通过实现 Serializable 接口,但却具体实现其方法,就可以标记为可序列化类
class Myclass implements Serializable {
    // 注意构造初始化后不修改的成员变量可以定义为final
    private final String str;

    // 实现构造函数,必定无返回值,所以不用写void,但构造函数因为外部调用所以为public
    public Myclass (String str){
        this.str = str;
    }

    public void PrintStr (){
        System.out.println(this.str);
    }
}

// java 似乎没有直接的函数概念,所以序列化的展示函数需要定义为类的成员函数
class SerializableExample {
    public SerializableExample(Myclass obj, String filename) {
        // 注意先创建一个FileOutputStream(filename) 再以此为参数创建一个 ObjectOutputStream,返回类型为ObjectOutput
        try ( ObjectOutput SerializedFile = new ObjectOutputStream(new FileOutputStream(filename))) {
            //调用成员函数writeObject直接写入文件
            SerializedFile.writeObject(obj);
            System.out.println("Object serialized to " + filename);
            // 关闭文件
            SerializedFile.close();
        } catch (IOException e) {
            // 如果捕获异常就打印log
            e.printStackTrace();
        }
    }
}

// 反序列化就是从序列化文件中重新恢复原有的类,此处是myclass 的实例 myobj
class DeserializableExample {
    public static Myclass deserializableExample(String filename) {
        Myclass obj = null;
        try ( ObjectInput File = new ObjectInputStream( new FileInputStream(filename) ) ) {
            obj = (Myclass) File.readObject();
            System.out.println("Deserialized from " + filename);

        } catch ( IOException | ClassNotFoundException e ) {
            e.printStackTrace();
        }
        return obj;
    }

}


public class Main {
    public static void main(String[] args)  {
        String filename = "./myobj.txt";
        // 创建myclass对象
        Myclass myobj = new Myclass("bitcong");
        myobj.PrintStr();

        // 序列化并写入文件
        new SerializableExample(myobj, filename );

        // 从文件中恢复并转换位myclass的实例myobj
        Myclass myobj1 = (Myclass) DeserializableExample.deserializableExample(filename);
        System.out.println("myobj1 str " );
        myobj1.PrintStr();
        System.out.println("Done !");
    }
}

输出内容如下:

bitcong
Object serialized to ./myobj.txt
Deserialized from ./myobj.txt
myobj1 str 
bitcong
Done !

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

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

相关文章

上海人工智能实验室浦视团队联培博士(2025)招生正式启动!

上海人工智能实验室浦视团队2025级联培博士招生计划开启啦! 上海人工智能实验室作为国内领先的人工智能领域的新型科研机构,不仅致力于攻克重要基础理论难题,更着眼于构建全球领先的 AI 技术人才培养平台。浦视团队是大模型方向的核心科研团…

Sqli-labs第五~八关(布尔盲注)

目录 首先找到他们的闭合方式 操作 总结: 第五关根据页面结果得知是字符型但是和前面四关还是不一样是因为页面虽然有东西。但是只有对于请求对错出现不一样页面其余的就没有了。这个时候我们用联合注入就没有用,因为联合注入是需要页面有回显位。如果…

【工具推荐】好用的电脑文件检索工具 everything

之前每次想要检索一些电脑中的文件,软件什么之类的 只能在“我的电脑”里面,搜索 我去,真的是巨慢无比~,搜好了有些时候又忘记了,然后就得重新搜 直到我发现了…… Everything 他的名字起的确实好,想找…

网络工程师----第二十五天

计算机基础 第二章:物理层 物理层的功能:怎样在连接各种计算机的传输媒体上传输数据比特流,屏蔽不同传输媒体和通信手段的差异。 传输媒体接口的特性: 机械特性:接口所用接线器的形状和尺寸、引脚数目和排列、固定…

【教程向】从零开始创建浏览器插件(一)

第一步:创建一个自己的浏览器插件 在这篇博客中,我们将学习如何创建一个简单的浏览器插件。对于本教程,我们将以创建一个在浏览器中运行的基本插件为例,该插件能够通过点击插件图标来改变当前网页背景色。我们将使用Chrome扩展程…

【APM】在Kubernetes中搭建OpenTelemetry+Loki+Tempo+Grafana链路追踪(一)

文章目录 1、最终效果2、前提准备2、环境信息3、服务集成(Opentelemetry ->Tempo)3.1 上报链路数据3.1.1 下载opentelemetry-agent3.1.2 启动配置业务app3.1.3 配置opentelemetry输入输出3.1.4 配置grafana datasource3.1.4.1 配置tempo3.1.4.2 配置l…

C++进阶 | [3] 续 | 搜索二叉树的两种模型

摘要:搜索二叉树的效率,搜索二叉树的两种搜索模型及应用举例 前面一片文章学习了并实现了搜索二叉树,这篇将从实际应用的角度进一步介绍搜索二叉树。 1. 搜索二叉树的效率 平衡搜索二叉树 BST的查找效率是 O(N)。 分析:如右图所示…

驾驭多云环境,加速AI创新丨Animbus Cloud 8.3.0 算力调度平台升级发布

大模型开启全球新一轮AI浪潮,伴随算力规模的爆发增长以及计算技术的多元创新,需要更稳定、高效、敏捷的异构计算基础设施,才能充分发挥对算力能力的重要支撑。 作为开放智能云边架构引领者,九州未来凭借多年的技术积累、实践沉淀…

怎么ai拍照搜题?让你的学习之路更平坦!

怎么ai拍照搜题?在数字化时代,人工智能(AI)的广泛应用已经渗透到我们生活的方方面面,其中AI拍照搜题功能更是受到了广大学子的热烈欢迎。这一功能通过拍照上传题目,利用AI技术快速识别并分析题目内容&#…

C语言——模拟实现库函数atoi

1. atoi atoi&#xff1a;将字符串转换为整数。 1. 头文件 <string.h> 2. 声明&#xff1a; 1. 如果字符串开始有空格&#xff0c;直接跳过。 2. - 会影响打印的数字的正负。 3. 只打印数字字符&#xff0c;遇到非数字字符就停止。 4. 如果转换之后的数字大于 …

非预警,这3本TOP期刊,为何走到On Hold这步?

本周投稿推荐 SSCI • 2区社科类&#xff0c;3.0-4.0&#xff08;社科均可&#xff09; EI • 计算机工程类&#xff08;接收广&#xff0c;录用极快&#xff09; SCI&EI • 4区生物医学类&#xff0c;1.5-2.0&#xff08;录用率99%&#xff09; • 1区工程类&#…

高性能计算基础

高性能计算基础 CUDA的线程组织结构 CUDA的存储体系结构&#xff0c;每一种存储的优缺点&#xff0c;该如何合理使用。GPU每一代的新特性有了解过吗&#xff1f;应该从哪里去了解详细信息&#xff1f;CUDA stream的概念&#xff0c;为什么要使用多个stream&#xff1f;GPU和…

html中用frameset对窗口进行划分

html中&#xff0c;一般有<head><body>等部分&#xff0c;在用<frameset>对窗口进行区域划分时&#xff0c;<body>标签对就不再需要了。直接删除就可以了。 请看下面的示例&#xff1a; 由于使用frameset进行窗口划分时&#xff0c;对于电脑屏幕的划分…

鸿蒙开发接口Ability框架:【(AbilityDelegator)】

AbilityDelegator AbilityDelegator提供添加用于监视指定能力的生命周期状态更改的AbilityMonitor对象的能力&#xff0c;包括对AbilityMonitor实例的添加、删除、等待ability到达OnCreate生命周期、设置等待时间等、获取指定ability的生命周期状态、获取当前应用顶部ability、…

美业收银系统源码-App/iPad/PC管理系统常见问题讲解(1)

博弈美业管理系统源码 连锁多门店美业收银系统源码 多门店管理 / 会员管理 / 预约管理 / 排班管理 / 商品管理 / 促销活动 PC管理后台、手机APP、iPad APP、微信小程序 1、平板iPad的评论内容&#xff0c;是从哪里评论的呢&#xff1f; 顾客在接受服务后&#xff0c;可以到…

从使用教程、实现原理、差异对比全方面带你玩转业务系统中高频使用的过滤器与拦截器

1.概述 在Java Web开发中&#xff0c;**过滤器&#xff08;Filter&#xff09;和拦截器&#xff08;Interceptor&#xff09;**是两种常见的组件&#xff0c;用于在请求到达目标资源之前或之后执行一些操作&#xff0c;如日志记录、权限控制、字符编码处理等。虽然它们的作用有…

PaddleOCR_PP-Structure

静态IP设置 # 修改网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33# 修改文件内容 TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOstatic IPADDR192.168.15.132 NETMASK255.255.255.0 GATEWAY192.168.15.2 DEFROUTEyes IPV4_FAILURE_FATALno IPV6INIT…

分布式锁之RedissonLock

什么是Redisson&#xff1f; 俗话说他就是看门狗&#xff0c;看门狗机制是一种用于保持Redis连接活跃性的方法&#xff0c;通常用于分布式锁的场景。看门狗的工作原理是&#xff1a;当客户端获取到锁之后&#xff0c;会对Redis中的一个特定的键设置一个有限的过期时间&#xff…

易我分区大师18.5发布上线:全方位提升您的磁盘管理体验

近期&#xff0c;易我分区大师18.5版本正式发布上线&#xff01; 新版本在原有基础上进行了升级和优化&#xff0c;不仅继承了前版本的强大功能&#xff0c;还新增了C盘数据迁移、清除Windows PIN码以及蓝屏问题助手等实用功能&#xff0c;帮助用户更轻松、更高效地管理电脑磁…

车载电子电器架构 —— UDS Service 11介绍

车载电子电器架构 —— UDS Service 11介绍 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证…