Java基础之序列化和反序列化

news2024/11/19 5:26:22

序列化的实现

====================================================================

java.io中的对象流提供了序列化和反序列化对象的方法

对象输出流 ObjectOutputStream

构造方法:

ObjectOutputStream(OutputStream out)

保存对象的方法:

void writeObject(Object obj)

对象输入流 ObjectInputStream

构造方法:

ObjectInputStream(InputStream out)

读取对象方法:

Object readObject()

序列化要注意的地方


  1. 只有实现了Serializable接口的对象,才能序列化,否则会抛出NotSerializableException

  2. 如果父类实现了Serializable接口,子类可以不实现该接口

  3. 类要序列化,类所有的属性也要序列化

  4. 声明为static和transient类型的属性不能被序列化

序列化案例


这个案例演示分别把一头大象和多头大象保存到磁盘文件中。

/**

  • 大象

*/

public class Elephant implements Serializable{

/**

*/

private static final long serialVersionUID = 2483988729860853698L;

private String name;

private Integer age;

private Double weight;

public String getName() {

ret

urn name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public double getWeight() {

return weight;

}

public void setWeight(double weight) {

this.weight = weight;

}

public Elephant(String name, int age, double weight) {

super();

this.name = name;

this.age = age;

this.weight = weight;

}

public Elephant() {

super();

}

@Override

public String toString() {

return “Elephont [name=” + name + “, age=” + age + “, weight=” + weight + “]”;

}

public void run(){

System.out.println(name+“在跑!!!!”);

}

}

@Test

public void testObjectOutput(){

//创建对象输出流

try(ObjectOutputStream out = new ObjectOutputStream(

new FileOutputStream(“C:/xpp/object”))){

//存入Java对象

out.writeObject(new Elephant(“非洲大象”,20,5000));

//存入对象集合

List list = Arrays.asList(

new Elephant(“非洲大黑象”,10,10000),

new Elephant(“非洲小黑象”,10,10000),

new Elephant(“亚洲小黑象”,10,10000),

new Elephant(“亚洲大黑象”,10,10000),

new Elephant(“亚洲小白象”,10,10000));

out.writeObject(list);

} catch (IOException e) {

e.printStackTrace();

}

}

@Test

public void testObjectInput(){

//创建对象输入流

try(ObjectInputStream in = new ObjectInputStream(

new FileInputStream(“C:/xpp/object”))){

//读取Java对象

Elephant elephont = (Elephant) in.readObject();

elephont.run();

//读取对象集合

List list = (List) in.readObject();

for(Elephant ele : list){

ele.run();

}

} catch (IOException e) {

e.printStackTrace();

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

我们看到无论是一个Java对象,或是一个Java集合都可以序列化到文件中,因为Java所有的集合也都实现了Serializable接口。

serialVersionUID的作用


当一个类实现序列化接口后,IDE会出现编译警告,并提示生成一个serialVersionUID。

也就是类中的常量:

private static final long serialVersionUID = 2483988729860853698L;

那么这个常量的作用是什么呢?

集合也都实现了Serializable接口。

serialVersionUID的作用


当一个类实现序列化接口后,IDE会出现编译警告,并提示生成一个serialVersionUID。

也就是类中的常量:

private static final long serialVersionUID = 2483988729860853698L;

那么这个常量的作用是什么呢?

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

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

相关文章

使用 MySQL、Thymeleaf 和 Spring Boot Framework 上传、存储和查看图像

在本文中,我们将使用 Spring Boot 框架从头开始构建映像库应用程序,用户可以在其中列出其映像。 以下是我们将在应用程序中实现的功能。 用户可以列出他们的图像以及详细信息,例如, 名字描述图像价格。(如果他们想卖…

Win11 启用旧右键菜单 _ Windows11 右键改回老版

Win11 系统在使用上和之前的系统差不多,但是在设计上,有了很大的改变,系统界面,设置等功能都使用了全新的风格,包括右键菜单,这让很多用户使用起来都很不习惯,因此想改回旧版的右键菜单来使用。…

汽车控制器概述

目录 一、整车控制器(VCU) 功能 工作模式 二、发动机控制器/电子控制单元(ECU) ECU基本组成 ECU的作用 ECU的工作原理 常见的ECU的类型 三、电机控制器(MCU) 四、 电池管理系统(BMS&a…

cubeIDE开发, stm32的USB从设备串口驱动设计

一、USB_OTG简介 USB_OTG(OTG,ON THE GO)是一款双角色设备(DRD) 控制器,同时支持从机(USB DEVICE)功能和主机(USB HOST)功能。在主机模式下,OTG 支持全速(OTG…

2022圣诞在即,出海品牌如何做好网红营销?

随着2022圣诞节逐渐临近,节日气氛也开始浓郁起来,尤其在社交媒体上,圣诞主题的内容越来越多,随之而来的则是各种营销与折扣。受经济形势影响,性价比在当下显得尤为重要,有60%的消费者表示,今年圣…

【能效分析】安科瑞变电所运维云平台解决方案应用分析

概述 安科瑞 李亚俊 壹捌柒贰壹零玖捌柒伍柒 AcrelCloud-1000变电所运维云平台基于互联网+大数据、移动通讯等技术开发的云端管理平台,满足用户或运维公司监测众多变电所回路运行状态和参数、室内环境温湿度、电缆及母线运行温度、现场设备或环境视频场…

CentOS MySQL安装

1.查询是否已经存在mariadb。 rpm -qa|grep mariadb如果存在需要卸载。 rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_642.通过xftp上传MySQL和Hive压缩包。 3.解压压缩包。 tar -zxvf apache-hive-2.3.4-bin.tar.gz -C /opt/apps/ tar -zxvf mysql-5.7.27-el7-x86_64.ta…

042-推箱子游戏源代码2

上一讲:041-推箱子游戏1_CSDN专家-赖老师(软件之家)的博客-CSDN博客 摘要: 1、使用JAVA基础知识 2、GUI界面编程实现推箱子界面,常用控件的综合应用; 3、使用JAVA绘图技术实现推箱子过程的绘图功能; 4、使用键盘事件,通过方向键实现推箱子过程; 5、使用音频技术,…

Android实现车辆检测(含Android源码 可实时运行)

Android实现车辆检测(含Android源码 可实时运行) 目录 Android实现车辆检测(含Android源码 可实时运行) 1. 前言 2. 车辆检测数据集说明 3. 基于YOLOv5的车辆检测模型训练 4.车辆检测模型Android部署 (1) 将Pytorch模型转换ONNX模型 &#xff08…

Python编程 圣诞树教程 (附代码)程序员的浪漫

作者简介:一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.python 做圣诞树 1.turtle库 2.python函数的定义规则 2.引入库 3.定…

中断系统中的设备树__在S3C2440上使用设备树描述中断体验

目录 1 怎么描述一个中断 2 怎么描述一个中断控制器 3 总结 1 怎么描述一个中断 我们想在设备树文件中描述一个中断,那么需要两个东西 a.指定是哪一个中断控制器 b.是中断控制器里面的哪一个中断。 假设我们有一个网卡,当网卡有数据时会产生一个中…

论文速度系列三:SA-SSD、CIA-SSD、SE-SSD

如有错误,恳请指出。 参考网上资料,对一些经典论文进行快速思路整理 文章目录1. SA-SSD2. CIA-SSD3. SE-SSD1. SA-SSD paper:《Structure Aware Single-stage 3D Object Detection from Point Cloud》(2020CVPR) 结构…

网络工程师备考4章

4.1 历年考点分布 4.2 局域网和城域网 4.2.1 局域网体系与拓扑结构 一般数据链路层的协议都是IEEE这个组织规范的,网络层是有RFC这个组织规范的。 数据链路层是可以划分为两个子层的,第一个叫逻辑链路控制LLC(对接上面的网络层),第二个叫MAC子层(更偏向于物理层)。 最…

【hadoop】Hadoop 3.3.4 集群安装及简单使用

目录环境信息1. 准备1.1 服务器规划1.2 主机名及hosts文件修改1.2.1 hostname修改1.2.2 hosts文件修改1.3 创建hadoop用户(建议)1.4 为hadoop用户添加sudo权限1.5 互信免密登录1.6 快速文件同步(可选)2. 安装2.1 下载并安装jdk2.2…

变量学习笔记

一:作用域 说起变量第一个要说到的肯定就是作用域,正是因为不熟悉JS的作用域,往往就会把面向对象的作用域张冠李戴,毕竟有些东西总是习惯性 的这样,但是并不是每次照搬都是可以的,那么下一个问题就来了,js到底是什么作用域,当然是函数作用域了,我们的浏览器就是一个被…

基于工业物联网的温度监测系统在钢铁行业的应用

随着钢铁行业的快速发展,越来越多电气设备被接入到工业生产系统中,对自动化和连续性的生产提出新的要求,需要关注到供电的稳定可靠,也要关注到用电设备的运行状态。电气设备在长期运行中会面临越来越高的风险,引发危险…

ncurses交叉编译

1.环境 编译环境:ubuntu18.04虚拟机 板端:移远AG550平台 编译链aarch64-oe-linux 2.ncurses下载 ncurses库下载地址:Index of /pub/gnu/ncurses 下载5.9的版本 3.解压并且编译 tar xvf ncurses-5.9.tar.gz cd ncurses-5.9 执行configure命…

Android与H5(Vue)交互

Android与H5互调 实现效果: JS调用Android方法实现dialog弹窗,Android点击弹窗确定/取消按钮调用JS方法,在H5界面展示传递的参数。 Vue准备: 执行 npm run serve 命令启动项目,启动成功后会在命令行看到两个地址&am…

beego框架学习之安装框架

Beego 是一个快速开发 Go 应用的 HTTP 框架,可以用来快速开发 API、Web 及后端服务等各种应用,是一个 RESTful 的框架,相对于echo框架仅包含路由和控制器核心模块,beego是一个完整的MVC框架包括路由&控制器、model 数据库ORM封…

GitLab结合fortify实现自动化代码审计实践

一、背景 在甲方做安全的同学可能会有一项代码审计的工作,通常需要从gitlab把代码拉取下来,然后使用代码审计工具进行扫描,然后对结果进行人工确认; 在这个流程中需要做的事情比较繁琐,比如说gitlab如何配置token、如…