IO流-ObjectInputStream对象处理流(序列化与反序列化)

2023-11-06 03:50

本文主要是介绍IO流-ObjectInputStream对象处理流(序列化与反序列化),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

对象处理流

ObjectInputStream (反序列化), ObjectOutputStream(序列化

在开发中会有这样一些需求, 例如 要求将 int 100 , Dog对象 序列化到 文件中, 需要时再反序列化 到 代码中。 

序列化和反序列化

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

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

3.需要让某个对象支持序列化机制,则必须让其类是可序列化的,为了让某个类是可序列化的,该类必须实现如下两个接口之一:

serializable //这是一个标记接口,  推荐使用

Externalizable //需要重写方法,较为麻烦,不推荐

类图

构造方法

常用方法

序列化与反序列化示例

特别注意: 序列化与反序列化的顺序必须一致,否则会报错

ObjectOutputStream objectOutputStream = null;//序列化后是特殊的格式, 序列化的文件后缀可以任意写, 没有固定格式String s = "f:\\xuliehua.dat";try {objectOutputStream = new ObjectOutputStream(new FileOutputStream(s));objectOutputStream.writeInt(100); //先自动装箱,Integer实现了Serializable接口objectOutputStream.writeBoolean(true);//先自动装箱,Boolean实现了Serializable接口objectOutputStream.writeChar('a');//.....objectOutputStream.writeDouble(1.2);//.....objectOutputStream.writeUTF("爱你一万年");//.....objectOutputStream.writeObject(new Pigg(1,1.2));//.....System.out.println("序列化完成");} catch (IOException e) {throw new RuntimeException(e);}finally {if(objectOutputStream != null) {try {objectOutputStream.close();} catch (IOException e) {throw new RuntimeException(e);}}}
   ObjectInputStream objectInputStream = null;String s = "f:\\xuliehua.dat";int val = 0;try {//反序列化一定要按照序列化的顺序来写代码objectInputStream = new ObjectInputStream(new FileInputStream(s));System.out.println(objectInputStream.readInt());System.out.println(objectInputStream.readBoolean());System.out.println(objectInputStream.readChar());System.out.println(objectInputStream.readDouble());System.out.println(objectInputStream.readUTF());Object object = objectInputStream.readObject();System.out.println(object.getClass());Pigg pigg = (Pigg)object;System.out.println(pigg.toString());}catch (IOException  e) {throw new RuntimeException(e);}
//        catch (ClassNotFoundException e) {
//            throw new RuntimeException(e);
//        }finally {if(objectInputStream != null){try {objectInputStream.close();} catch (IOException e) {throw new RuntimeException(e);}}}
public class Pigg implements Serializable {int a;double b;public static final long serialVersionUID = 1L; //增加这个版本号,提高兼容性public Pigg(int a, double b) {this.a = a;this.b = b;}public int getA() {return a;}public void setA(int a) {this.a = a;}public double getB() {return b;}public void setB(double b) {this.b = b;}@Overridepublic String toString() {return "pigg{" +"a=" + a +", b=" + b +'}';}
}

 public static final long serialVersionUID = 1L; //增加这个版本号,提高兼容性

节点流和处理流注意事项和细节说明

1)读写顺序要一致

2)要求实现序列化或反序列化对象,需要实现 Serializable

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

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

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

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

这篇关于IO流-ObjectInputStream对象处理流(序列化与反序列化)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/354312

相关文章

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

mysql外键创建不成功/失效如何处理

《mysql外键创建不成功/失效如何处理》文章介绍了在MySQL5.5.40版本中,创建带有外键约束的`stu`和`grade`表时遇到的问题,发现`grade`表的`id`字段没有随着`studen... 当前mysql版本:SELECT VERSION();结果为:5.5.40。在复习mysql外键约

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取

Python视频处理库VidGear使用小结

《Python视频处理库VidGear使用小结》VidGear是一个高性能的Python视频处理库,本文主要介绍了Python视频处理库VidGear使用小结,文中通过示例代码介绍的非常详细,对大家的... 目录一、VidGear的安装二、VidGear的主要功能三、VidGear的使用示例四、VidGea

Python结合requests和Cheerio处理网页内容的操作步骤

《Python结合requests和Cheerio处理网页内容的操作步骤》Python因其简洁明了的语法和强大的库支持,成为了编写爬虫程序的首选语言之一,requests库是Python中用于发送HT... 目录一、前言二、环境搭建三、requests库的基本使用四、Cheerio库的基本使用五、结合req

使用Python处理CSV和Excel文件的操作方法

《使用Python处理CSV和Excel文件的操作方法》在数据分析、自动化和日常开发中,CSV和Excel文件是非常常见的数据存储格式,ython提供了强大的工具来读取、编辑和保存这两种文件,满足从基... 目录1. CSV 文件概述和处理方法1.1 CSV 文件格式的基本介绍1.2 使用 python 内

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery