【问题】java序列化,什么时候使用

这篇具有很好参考价值的文章主要介绍了【问题】java序列化,什么时候使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

是什么

把对象转换为字节序列的过程称为对象的序列化。
把字节序列恢复为对象的过程称为对象的反序列化。
对象的序列化主要有两种用途:
  1)把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
  2)在网络上传送对象的字节序列。

为什么

一般来说如果你的对象需要网络传输或者持久化 (对象直接转换为字节的形式传输),那么就需要实现Serializable接口。比如远程方法调RPC (Remote Procedure Call) 则接口参数就一定要实现Serializable接口;如果只是转换为json字符串的形式与网络打交道,那么就不需要实现Serializable接口。
持久化数据库,rpc调用外部接口,网络通信时候。
这几种情况需要实现serialliable接口,转换JSON不需要实现接口

如何做

流操作

  /**
     * 序列化操作
     */
    public static void serialize() {
        String targetFile = PATH_PREFIX.concat("user.txt");
        try (ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File(targetFile)))) {
            UserDomain userDomain = UserDomain.builder().userName("小明").address("123@163.com").build();
            objectOutputStream.writeObject(userDomain);
        } catch (IOException e) {
            log.error("e : 【{}】", e);
            throw new RuntimeException(e);
        }
        log.info("【序列化结束,生成文件user.txt】");
    }

    /**
     * 反序列化
     *
     * @return
     */
    public static UserDomain deserialize() {
        String targetFile = PATH_PREFIX.concat("user.txt");
        UserDomain user = null;
        try (ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(new File(targetFile)))) {
            user = (UserDomain) inputStream.readObject();
        } catch (IOException | ClassNotFoundException e) {
            log.error("e : 【{}】", e);
            throw new RuntimeException(e);
        }
        log.info("【反序列化结束】");
        return user;
    }
    /**
     * 序列化操作
     */
 
    @Test
    public void testSerialization(){
        FileUtil.serialize();
        UserDomain user = FileUtil.deserialize();
        log.info("user : [{}]" , user);
    }

16:10:08.019 [main] INFO com.geekmice.springbootselfexercise.NoDaoTest - user : [UserDomain(id=null, userName=小明, birthday=null, sex=null, address=123@163.com)]文章来源地址https://www.toymoban.com/news/detail-654144.html

注事事项

到了这里,关于【问题】java序列化,什么时候使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用序列化和反序列化函数archivedDataWithRootObject和unarchivedObjectOfClasses的使用和遇到问题及解决方案

    为何archiveRootObject和unarchiveObjectWithFile正常,而archivedDataWithRootObject和unarchivedObjectOfClasses一直报错。 [NSKeyedArchiver archiveRootObject:account toFile:path]; 和`c PPAccountModel *account = [NSKeyedUnarchiver unarchiveObjectWithFile:path]; 替换很简单,但是会一堆问题等着你解决,序列化和反序列全失败。

    2024年02月16日
    浏览(38)
  • 什么是序列化和反序列化?

    JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)是两种常用的数据交换格式,用于在不同系统之间传输和存储数据。 JSON是一种轻量级的数据交换格式,它使用易于理解的键值对的形式表示数据。JSON数据结构简单明了,易于读写和解析,是基于JavaScript的一种常用数据

    2024年02月09日
    浏览(58)
  • SpringCache 框架使用以及序列化和缓存过期时间问题的解决

    目录 为什么使用Spring Cache 如何使用Spring Cache 1 加依赖 2 开启缓存 3 加缓存注解 序列化以及过期时间等问题 解决方案:自定义序列化方式 1.自定义序列化方式并设置白名单 2.配置并设置缓存的过期时间         缓存有诸多的好处,于是大家就摩拳擦掌准备给自己的应用加

    2024年02月15日
    浏览(40)
  • Unity | 序列化(Serialized)和反序列化(NonSerialized)是什么意思

    一、什么是序列化 官方叙述: 序列化是将对象的状态信息转换为可以存储或传输的形式的过程。 人话叙述: 我们平时输入的代码,实际上是不能储存或者传输的,所以我们需要翻译一下,翻译成能储存或者翻译的文字,这个翻译的过程叫做序列化。 二、什么要序列化 问题

    2024年02月11日
    浏览(52)
  • 【常见问题】Java 8 date/time type `java.time.LocalDateTime` not supported by default:日期序列化问题

    将一个包含LocalDateTime对象的集合进行序列化和反序列化时,可能会遇到以下异常: 这是因为Jackson库在默认情况下不支持LocalDateTime类型的序列化和反序列化。为了解决这个问题,我们需要自定义序列化和反序列化的行为。 1. 引入依赖 2. 设定时间模块 1. 自定义序列化器 首先

    2024年02月02日
    浏览(56)
  • Java 8 date/time type `java.time.LocalDateTime` not supported by default:日期序列化问题

    解决办法一:将实体类中的LocalDateTime转为Date类型 解决办法二: 通过注解指定 配置全局 解决办法三: 用阿里的FastJson替换ObjectMapper

    2024年02月12日
    浏览(45)
  • Spring boot使用Kafka Java反序列化漏洞 CVE-2023-34040

    背景:公司项目扫描到 Spring-Kafka上使用通配符模式匹配进行的安全绕过漏洞 CVE-2023-20873 中等风险 | 2023年8月23日 | CVE-2023-34040 在Spring for Apache Kafka 3.0.9及更早版本以及2.9.10及更早版本中,存在可能的反序列化攻击向量,但只有在应用了不常见的配置时才会出现。攻击者必须在

    2024年02月07日
    浏览(51)
  • 简单理解什么是序列化

    序列化的目的就是为了对象可以在网络层进行传输, 比如通过后端传给前端数据。 我们以Java为例。 序列化就是把对象转化为可传输的字节序列过程,这个字节序列可以是字符串,比如JSON格式的字符串,把内存中的java对象转化成JSON格式的字符串的过程,就是序列化的过程。

    2024年02月02日
    浏览(43)
  • C#: Json序列化和反序列化,集合为什么多出来一些元素?

    如下面的例子,很容易看出问题: 如果类本身的无参构造函数, 就添加了一些元素,序列化,再反序列化,会导致元素增加。 如果要避免,必须添加: new JsonSerializerSettings() { ObjectCreationHandling = ObjectCreationHandling.Replace }

    2024年02月10日
    浏览(56)
  • Java序列化和反序列化

    目录 一、序列化和反序列化 二、Java序列化演示 三、反序列化漏洞 1、含义 ​序列化就是内存中的对象写入到IO流中,保存的格式可以是二进制或者文本内容。反序列化就是IO流还原成对象。 2、用途 (1)传输网络对象 (2)保存Session 1、序列化 java.io.ObjectOutputStream代表对象

    2023年04月25日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包