返回顶部
首页 > 资讯 > 后端开发 > Python >Java文件操作之序列化与对象处理流详解
  • 572
分享到

Java文件操作之序列化与对象处理流详解

2024-04-02 19:04:59 572人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录1.序列化与反序列化2.对象处理流2.1 概述2.2 ObjectOutputStream案例2.3 ObjectInputStream案例2.4 对象处理流的使用细节1.序列化

1.序列化与反序列化

序列化就是在保存数据时,保存数据的值和数据类型;

反序列化就是在恢复数据时,恢复数据的值和数据类型;

需要让某个对象支持序列化机制,则必须让其类是可序列化的;

为了让某个类是可序列化的,该类必须实现 Serilizable与 Externalizable 两个接口之一。

为什么需要对象处理流?

答:假设我们存储了 int num = 20这个数据到文件中,而这个20是一个数字,我们需要从文件中将数据恢复。

可是,文件中仅仅存储了 20 这一个数字,我们没有办法判断,存储它的时候是将它存储为了 int 类型还是 String 类型。

而对象处理流,就是帮助我们解决类似问题的,即:能够将 基本数据类型 或者 对象 进行序列化和反序列化操作!

2.对象处理流

2.1 概述

ObjectOutputStream 提供 序列化功能;

ObjectInputStream 提供 反序列化功能。

提供了对基本类型或者对象类型的序列化和反序列化方法。

类的继承关系图如下:

2.2 ObjectOutputStream案例

使用ObjectOutputStream序列化基本数据类型和一个Student对象(name,age),保存到data.dat文件中。

参考代码与结果:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;


public class ObjectOutputStreamTest {
    public static void main(String[] args) {
        //创建流对象
        ObjectOutputStream objectOutputStream = null;
        try {
            objectOutputStream = new ObjectOutputStream(new FileOutputStream(
                    "D:\\ideaproject2021\\JavaSE\\src\\iochapter\\data.dat"));
            //序列化后,保存的文件格式,不是纯文本,而是按照它自己的格式存储的
            //序列化数据
            //int -> Integer(实现了 Serializable)
            objectOutputStream.writeInt(100);
            //boolean -> Boolean(实现了 Serializable)
            objectOutputStream.writeBoolean(true);
            //char -> Character
            objectOutputStream.writeChar('a');
            //String
            objectOutputStream.writeUTF("黄小黄");
            //保存一个Student对象
            objectOutputStream.writeObject(new Student("黄小黄", 21));

            System.out.println("数据序列化成功!");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //释放资源
            if(objectOutputStream != null) {
                try {
                    objectOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

class Student implements Serializable{
    private String name;
    private int age;

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

说明:

序列化基本数据类型的时候,会进行自动装箱。比如存储int类型的100,则会以Integer的形式自动装箱后存储,因为Integer实现了Serializable接口。

2.3 ObjectInputStream案例

使用ObjectInputStream读取data.dat的数据,并反序列化恢复数据。

参考代码与结果:

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


public class ObjectInputStreamTest {
    public static void main(String[] args) {
        //创建流对象
        ObjectInputStream objectInputStream = null;
        try {
            objectInputStream = new ObjectInputStream(new FileInputStream(
                    "D:\\Ideaproject2021\\JavaSE\\src\\IOchapter\\data.dat"));
            //读取数据
            System.out.println(objectInputStream.readInt());
            System.out.println(objectInputStream.readBoolean());
            System.out.println(objectInputStream.readChar());
            System.out.println(objectInputStream.readUTF());
            System.out.println(objectInputStream.readObject());
            //程序结束
            System.out.println("反序列化完成!");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            //释放资源
            if (objectInputStream != null){
                try {
                    objectInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
 }

说明:

反序列化的顺序一定要与序列化的顺序一样,否则,程序会抛出异常。

2.4 对象处理流的使用细节

1.读写顺序一致,即序列化与反序列化的顺序应该一致;

2.要求实现序列化或者反序列化对象,需要实现Serializable接口;

3.序列化类中建议添加SerialVersionUID,为了提高版本兼容性;

4.序列化对象时,默认将里面所有的属性都进行序列化,但static与transient修饰的成员除外;

5.序列化对象时,要求里面的属性的类型也要实现序列化接口;

6.序列化具备可继承性,也就是如果某类已经实现了序列化,则它的所有子类也已经默认实现了序列化。

到此这篇关于Java文件操作之序列化与对象处理流详解的文章就介绍到这了,更多相关Java序列化 对象处理流内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java文件操作之序列化与对象处理流详解

本文链接: https://lsjlt.com/news/167593.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java文件操作之序列化与对象处理流详解
    目录1.序列化与反序列化2.对象处理流2.1 概述2.2 ObjectOutputStream案例2.3 ObjectInputStream案例2.4 对象处理流的使用细节1.序列化...
    99+
    2024-04-02
  • Java对象的序列化与反序列化详解
    一、序列化和反序列化的概念把对象转换为字节序列的过程称为对象的序列化,把字节序列恢复为对象的过程称为对象的反序列化。对象的序列化主要有两种途径:Ⅰ . 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中Ⅱ.  在网络上传送对...
    99+
    2023-05-31
    java 序列化 反序列化
  • 一文详解Java对象的序列化和反序列化
    目录一、什么是 Java 序列化和反序列化?二、序列化和反序列化的实现方式三、序列化和反序列化的注意事项四、序列化和反序列化的优点和缺点五、总结Java 对象的序列化和反序列化是一种...
    99+
    2023-05-16
    Java对象序列化 Java对象反序列化 Java对象序列化和反序列化
  • Java IO流对象的序列化和反序列化实例详解
    Java—IO流 对象的序列化和反序列化序列化的基本操作  1.对象序列化,就是将Object转换成byte序列,反之叫对象的反序列化。  2.序列化流(ObjectOutputStream),writeObject 方法用于将对象写入输出...
    99+
    2023-05-31
    java io流 序列化
  • Python 对象序列化与反序列化之pickle json详细解析
    目录引言picklejson尾语引言 将对象的状态信息转换为可以存储或传输的形式的过程叫作序列化 类似地从序列化后的数据转换成相对应的对象叫作 反序列化 本文介绍 Python 将对...
    99+
    2024-04-02
  • Java IO流之原理分类与节点流文件操作详解
    目录IO流简介IO流原理流的分类IO 流体系节点流和处理流节点流操作IO流简介 I/O是Input/Output的缩写, I/O技术是非常实用的技术,用于处理设备之间的数据传输。如读...
    99+
    2024-04-02
  • python中IO流和对象序列化详解
    目录一.IO流的操作二.对象序列化总结一.IO流的操作 (1).什么是IO流(Input Output Stream)?IO流说的主要是计算机的输入和输出操作。常见的IO操作,一般说...
    99+
    2024-04-02
  • Python文件的应用之序列化与反序列化详解
    目录初识序列化与反序列化什么是序列化?可序列化的数据类型Python 中的jsondumps() 与 loads() 函数可序列化数据类型演示案例bool 、None 类型的序列化与...
    99+
    2024-04-02
  • Java基础之序列化与反序列化详解
    目录1、什么是序列化与反序列化?2、Java如何实现序列化和反序列化?3、如何自定义序列化和反序列化呢?4、writeObject和readObject方法5、serializabl...
    99+
    2024-04-02
  • Java对象的XML序列化与反序列化实例解析
    上一篇文章我们介绍了java实现的各种排序算法代码示例,本文我们看看Java对象的xml序列化与反序列化的相关内容,具体如下。XML是一种标准的数据交换规范,可以方便地用于在应用之间交换各类数据。如果能在Java对象和XML文档之间建立某种...
    99+
    2023-05-30
    java xml 序列化
  • Java文件与IO流操作原理详细分析
    目录一、文件1、基本解释2、常用的文件操作3、获取文件相关信息4、目录操作和文件删除二、IO流原理及分类1、IO流原理2、流的分类3、IO流体系图一、文件 1、基本解释 (1)什么是...
    99+
    2024-04-02
  • Java中对象的序列化详解及实例
     Java中对象的序列化详解及实例把java对象转化为字节序列的过程称为对象的序列化。把字节序列恢复为java对象的过程称为对象的反序列化。对象序列化的用途:把对象的字节序列永久的保存到硬盘上,通常存放在一个文件中2.在网络上传送...
    99+
    2023-05-31
    java 序列化 中对
  • 如何在Java项目中利用序列化与反序列化将对象文件写入与导出
    如何在Java项目中利用序列化与反序列化将对象文件写入与导出?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java类中对象的序列化工作是通过ObjectOutp...
    99+
    2023-05-31
    java 序列化 反序列化
  • Java文件操作之IO流 File类的使用详解
    File类概述 File类能新建、删除、重命名文件和目录,但不能访问文件内容本身,如果需要访问文件内容本身,则需要使用后续的输入/输出流。 要在Java程序中表示一个真实存在的文件或...
    99+
    2024-04-02
  • 详解Java目录操作与文件操作教程
    目录目录操作创建目录判断这个文件或目录是否存在判断是否是目录读取目录删除目录文件操作创建文件删除文件File对象常用函数目录操作 创建目录 File类中有两个方法可以用来创建文件夹:...
    99+
    2024-04-02
  • python处理xml文件操作详解
    目录1、python 操作xml的方式介绍2、ElementTree模块3、解析xml格式字符串并获取根节点4、读取节点内容,getroot()5、通标标签名直接获取标签(find,...
    99+
    2024-04-02
  • Python文件的操作处理详解
    目录1.使用open()函数打开文件夹2.文件的操作3.使用File操作文件        3.1Fi...
    99+
    2024-04-02
  • Pandas处理时间序列数据操作详解
    目录前言一、获取时间二、时间索引三、时间推移前言 一般从数据库或者是从日志文件读出的数据均带有时间序列,做时序数据处理或者实时分析都需要对其时间序列进行归类归档。而Pandas是处理...
    99+
    2024-04-02
  • python中文件操作与异常的处理图文详解
    目录一、 文件的操作1.1创建文件1.2写入数据1.3读数据1.4读数据1.5读写数据1.6删除文件1.6写入文件1.7读取图片1.8备份图片1.9文件重命名1.10创建文件夹1.1...
    99+
    2024-04-02
  • java 对象输入输出流读写文件的操作实例
    java 对象输入输出流读写文件的操作实例java 支持对对象的读写操作,所操作的对象必须实现Serializable接口。 实例代码:package vo; import java.io.Serializable; public cl...
    99+
    2023-05-31
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作