java中的序列化和反序列化

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

  • objectOutputStream 对象的序列化,以流的形式将对象写入文件

  • 构造方法:

  1. objectOutputStream(OutputStream out) 传入一个字节输入流创建objectOutputStream对象
  • 成员方法:
  1. void writeObject(object obj) 将指定的对象写入objectOutputStream
  • 使用步骤:
  1. 创建一个类,这个类实现Serializable接口,Serializable是一个标记

  2. 创建ObjectOutputStream对象,构造方法中传递字节输出流

  3. 使用ObjectOutputStream对象中的writeObject方法将对象写入文件中

  4. 释放资源

    import java.io.Serializable;
    
    public class Student implements Serializable {
    //    属性设置为private
        private String name;
        private int age;
        private static String room;
        //无参数构造
        public Student() {
        }
        //有参数构造
        public Student(String name, int age, String room) {
            this.name = name;
            this.age = age;
            this.room=room;
        }
        //getter方法
        public String getName() {
            return name;
        }
        public int getAge() {
            return age;
        }
    
        public static String getRoom() {
            return room;
        }
    
        //setter方法
        public void setName(String name) {
            this.name = name;
        }
        public void setAge(int age) {
            this.age = age;
        }
    
        public static void setRoom(String room) {
            Student.room = room;
        }
        //重写equals方法
        public boolean equals(Object obj){
            if(obj instanceof Student) {
                //首先将得到的Object转为Student,否则使用不了Student特有的方法(多态的弊端)
                Student t = (Student) obj;
                return t.getAge() == this.getAge() && t.getName() == this.getName() && t.getRoom() == this.getRoom();
            }
            return false;
        }
          @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    
    
        private static void test1() throws IOException {
            ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("oos.txt"));
            oos.writeObject(new Student("zs",18,"h001"));
            oos.close();
        }
    
  • objectInputStream 对象的反序列化流,把文件中保存的对象以流的形式读取出来使用

  • 构造方法:

  1. objectInputStream(InputStream in) 传入InputStream字节输入流对象来创建一个objectInputStream对象
  • 使用步骤
  1. 创建objectInputStream对象,传入字节输入流作为参数

  2. 使用objectInputStream对象的方法readObject来读取文件中的对象

  3. 打印对象

  4. 释放资源

        private static void test2() throws IOException, ClassNotFoundException {
            ObjectInputStream  ois=new ObjectInputStream(new FileInputStream("oos.txt"));
            Object o=ois.readObject();
            Student t=(Student) o;
            System.out.println(t);
            ois.close();
    
        }
    
  5. 特别注意的是,这里反序列化的时候,必须要保证序列化的类没有改变过,如果在序列化保存到文件中之后类被修改过了,那么需要重新序列化,否则反序列化会失败。

  6. 使用static关键字和transient关键字修饰的变量不可以被序列化,所以我们如果不想要某个变量被序列化,那么可以使用static或者transient修饰文章来源地址https://www.toymoban.com/news/detail-624382.html

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

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

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

相关文章

  • 一文了解Java序列化和反序列化:对象的存储与传输

    Java序列化是一项强大而重要的技术,它允许我们将对象转换为字节流,以便在存储、传输和重建时使用。在本文中,我们将深入探讨Java序列化的基本概念、使用方法以及一些应用场景。 Java序列化是指将对象转换为字节流的过程,以便可以将其存储到文件、数据库或在网络上

    2024年02月13日
    浏览(7)
  • 又一个难题:Java 序列化和反序列化为什么要实现 Serializable 接口?

    作者:椰子Tyshawn 来源:https://blog.csdn.net/litianxiang_kaola 最近公司的在做服务化, 需要把所有model包里的类都实现Serializable接口, 同时还要显示指定serialVersionUID的值. 听到这个需求, 我脑海里就突然出现了好几个问题, 比如说: 序列化和反序列化是什么? 实现序列化和反序列化为什

    2024年02月08日
    浏览(21)
  • rust学习-json的序列化和反序列化

    由于 serde 库默认使用 JSON 格式进行序列化和反序列化 因此程序将使用 JSON 格式对数据进行序列化和反序列化 JSON:广泛使用的 JavaScript 对象符号,用于许多 HTTP API Postcard:no_std 和嵌入式系统友好的紧凑二进制格式。 CBOR:用于小消息大小且无需版本协商的简洁二进制对象表示

    2024年02月12日
    浏览(10)
  • Java反序列化学习

    早知前路多艰辛,仙尊悔而我不悔。Java反序列化,免费一位,开始品鉴,学了这么久web,还没深入研究Java安全,人生一大罪过。诸君,请看。 简单demo: 可以看出writeObject就是序列化(注:只有实现了Serializable接口的类才能被序列化),readObject就是反序列化,建议自己上手

    2024年03月16日
    浏览(18)
  • 【Linux】序列化和反序列化

    在网络编程中,直接使用 结构体 进行数据传输会出错,因为 本质上socket无法传输结构体 ,我们只有将结构体装换为字节数组,或者是字符串格式来传输,然后对端主机收到了数据,再将其转化为结构体,这就是序列化和反序列化的过程! 序列化 (Serialization)是将对象的状态

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

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

    2024年02月09日
    浏览(13)
  • Unity-序列化和反序列化

    序列化是指把对象转换为字节序列的过程,而反序列化是指把字节序列恢复为对象的过程。序列化最主要的用途就是传递对象和保存对象。 在Unity中保存和加载、prefab、scene、Inspector窗口、实例化预制体等都使用了序列化与反序列化。 1 自定义的具有Serializable特性的非抽象、

    2024年01月24日
    浏览(18)
  • TCP定制协议,序列化和反序列化

    目录 前言 1.理解协议 2.网络版本计算器 2.1设计思路 2.2接口设计 2.3代码实现: 2.4编译测试 总结         在之前的文章中,我们说TCP是面向字节流的,但是可能对于面向字节流这个概念,其实并不理解的,今天我们要介绍的是如何理解TCP是面向字节流的,通过编码的方式,自

    2024年02月12日
    浏览(8)
  • [计算机网络]---序列化和反序列化

    前言 作者 :小蜗牛向前冲 名言 :我可以接受失败,但我不能接受放弃    如果觉的博主的文章还不错的话,还请 点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正  目录  一、再谈协议 二、序列化和反序化 1、网络版本计算器的场景搭建 2、

    2024年02月20日
    浏览(18)
  • jackjson自定义序列化和反序列化

    JRT引用的jackjson作为json处理库。由于JRT.ORM要求表不用datetime类型,把日期和时间用Int存储,所以ORM要支持日期时间的转换。为什么要把日期时间不用datetime而用Int,比如日期:20240117,时间就是从0点到当前的秒数。因为不用datetime兼容性好,不会因为不同库datetime函数不同而要

    2024年01月18日
    浏览(13)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包