Java 对象序列化

2023-11-11

目录

一、序列化

定义:

方法:

代码:

二、反序列化

定义:

方法:

代码:

三、自定义类序列化

步骤:

代码:


一、序列化

定义:

将内存中的Java对象保存到磁盘中或通过网络传输过去

方法:

使用过ObjectOutputStream类实现。

另外,ObjectOutputStream和ObjectInputStream不能序列化static和transient的成员变量

代码:

//序列化过程
    @Test
    public void test_Objectoutputstream(){
        ObjectOutputStream oos= null;
        try {
            oos = new ObjectOutputStream(new FileOutputStream("D:\\Java develop\\Program\\superior_Java\\hello5.dat"));
            String name="Ingram";
            oos.writeObject(name);
            oos.flush();
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if(oos!=null) {
                try {
                    oos.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }

    }

二、反序列化

定义:

将对象从磁盘或者网络中读取到内存中(程序中)的过程

方法:

使用ObjectInputStream类实现

代码:

//反序列化过程
    @Test
    public void test_ObjectInputStream()  {
        ObjectInputStream ois= null;
        try {
            ois = new ObjectInputStream(new FileInputStream("D:\\Java develop\\Program\\superior_Java\\hello5.dat"));
            Object s=ois.readObject();
            String str=(String)s;
            System.out.println(str);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        } finally {
            if(ois != null)
                try {
                    ois.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
        }

    }

运行结果:

三、自定义类序列化

步骤:

要实现自定义类序列化:

1.需要去实现接口:Serializable

2.需要为当前类提供一个全局常量:SerializableUID

3.除了当前类Person需要实现Serializable接口之外,还必须保证内部所有属性也必须是可序列化的

代码:

先定义一个Person类

package Network_programming;

import java.io.Serializable;

/*要实现自定义类可序列化:
* 1.需要实现接口:Serializable
* 2.需要当前类提供一个全局常量:SerializableUID
* 3.除了当前类Person需要实现Serializable接口之外,还必须保证内部所有属性也必须是可序列化的
* */
public class Person implements Serializable {
    public static final long serializableUID=23424324234L;
    private  String name;
    private  int number;

    public Person(String name, int number) {
        this.name = name;
        this.number = number;
    }

    public Person() {
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return number
     */
    public int getNumber() {
        return number;
    }

    /**
     * 设置
     * @param number
     */
    public void setNumber(int number) {
        this.number = number;
    }

    public String toString() {
        return "Person{name = " + name + ", number = " + number + "}";
    }
}

序列化与反序列化实现:

package Network_programming;

import org.junit.Test;

import java.io.*;

public class demo2 {
    public static void main(String[] args) {
        test_Objectoutputstream();
        test_ObjectInputStream();
    }

    public static void test_Objectoutputstream(){
        ObjectOutputStream oos= null;
        try {
            oos = new ObjectOutputStream(new FileOutputStream("D:\\Java develop\\Program\\superior_Java\\hello6.dat"));
            String name="Ingram";
            //oos.flush();
            oos.writeObject(name);
            oos.writeObject(new Person("ingram",14));
            oos.flush();

        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if(oos!=null) {
                try {
                    oos.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }

    }

    //反序列化过程
    public static void test_ObjectInputStream()  {
        ObjectInputStream ois= null;
        try {
            ois = new ObjectInputStream(new FileInputStream("D:\\Java develop\\Program\\superior_Java\\hello5.dat"));
            Object s=ois.readObject();
            String str=(String)s;
            System.out.println(str);
            System.out.println((Person)ois.readObject());
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        } finally {
            if(ois != null)
                try {
                    ois.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
        }

    }
}

结果:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 对象序列化 的相关文章

  • Hibernate 4 字节码增强不适用于脏检查优化

    我正在使用 Hibernate 4 3 6 并且我使用了最新的Maven 字节码增强 http vladmihalcea com hibernate 4 bytecode enhancement 使所有实体提高自我肮脏意识 我添加了mave
  • Android 中的 java.util.Observable 是线程安全的吗?

    Android 中的 java util Observable 是线程安全的吗 这文档 http developer android com reference java util Observable html说只有deleteObser
  • Java HashMap 嵌套泛型与通配符

    我正在尝试创建包含自定义类的不同子类的哈希集的哈希映射值的哈希映射 如下所示 HashMap
  • Ant 中回显目标描述

  • 为什么这个动作不抽象? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我很难理解为什么一个类中的一个操作是抽象的 而另一个类中的操作不是 源代码1 编译时出错 https gyazo com cd3c
  • javax.persistence.TransactionRequiredException:没有可用于当前线程的实际事务的 EntityManager

    我使用 Hibernate 创建了我的第一个 Spring MVC 项目 我的 DAO 层使用 JPA EntityManager 与数据库交互 GenericDao java Repository public abstract clas
  • Java - toString 到 Color

    我一整天都在努力解决这个问题 基本上我做了一个 for 循环 将条目添加到数组列表中 其中一项是 颜色 变量 我已经用过random nextInt为颜色构造函数的红色 绿色和蓝色部分创建新值 我还设置了一个toString方法 这样我就可
  • 使用 Hibernate Criteria 过滤 Map 中的键和值

    我有以下持久类 public class Code ElementCollection targetClass CodeValue class MapKeyClass CodeProperty class JoinTable name co
  • 为本地@ExceptionHandler编写JUnit测试

    我有以下控制器 class Controller ResponseStatus HttpStatus OK RequestMapping value verifyCert method RequestMethod GET public vo
  • 如何从 Java 中“double”类型的值中删除小数值

    我正在调用一个名为 calculateStampDuty 的方法 它将返回 财产需缴纳的印花税金额 百分比计算有效 很好 并返回正确的值 15000 0 但是 我想显示该值 前端用户只是 15000 所以只想删除小数点和任何前面的值 此后
  • java 中的 Try-with-resources 和 return 语句

    我想知道是否放一个return里面的声明尝试资源block 防止资源自动关闭 try Connection conn return conn createStatement execute 如果我写这样的东西将会联系被关闭 Oracle 文
  • 在 Java 中的 JFrame/JPanel/JComponent 中添加 Web 浏览器

    我正在开发一个 Java 应用程序 需要在应用程序中使用 Web 浏览器 我见过一些应用程序这样做 例如在同一应用程序中单击左侧面板中的提要并打开右侧面板中的链接时的 RSS 阅读器 我想实现类似的功能 在java中可以做到这一点吗 Jav
  • Java:不使用 Arrays.sort() 对整数数组进行排序

    这是我们 Java 课程的练习之一中的说明 首先 我想说我 做了我的功课 我不仅仅是懒惰地请 Stack Overflow 上的人帮我回答这个问题 在所有其他练习中 这个特定项目一直是我的问题 因为我一直在努力寻找 完美的算法 编写JAVA
  • JPA 的 Hibernate 查询提示

    我一直在尝试为所有可以通过设置的提示找到一个明确的资源Query setHint String Object JPA 中的方法调用 但我一无所获 有人知道一个好的参考吗 See 3 4 1 7 查询提示 http docs jboss or
  • 单元测试、集成测试还是设计中的问题?

    我编写了我的第一个单元测试 我认为它过于依赖其他模块 我不确定是否是因为 这是一个复杂的测试 我实际上已经编写了集成测试或 我的设计有问题 我首先要说的是 虽然我有大约 4 年的开发经验 但我从未学过 也没有人教过自动化测试 我刚刚使用 H
  • Java8 项目上的 SonarQube 给出 jacoco-Exception

    我刚刚下载了最新版本 SonarQube 4 3 然后尝试使用以下命令构建 java 8 项目 mvn clean install mvn sonar sonar 这给了我下面的例外 谷歌搜索 我的印象是这是一个早期的问题 应该已经解决 h
  • 如何从 Trie 中检索给定长度的随机单词

    我有一个简单的 Trie 用来存储大约 80k 长度为 2 15 的单词 它非常适合检查字符串是否是单词 但是 现在我需要一种获取给定长度的随机单词的方法 换句话说 我需要 getRandomWord 5 来返回 5 个字母的单词 所有 5
  • Java:java.util.Preferences 失败

    我的程序将加密的产品密钥数据保存到计算机上java util Preferences类 系统首选项 而不是用户 问题是 在 Windows 和 Linux 上 尚未在 OSX 上测试过 但可能是相同的 如果我不运行该程序sudo或者具有管理
  • 应用程序中空指针异常[重复]

    这个问题在这里已经有答案了 我正在尝试在我的应用程序中实施应用程序内计费 我写了这段代码 public class Settings extends PreferenceFragment ServiceConnection mService
  • 通过向上转换将 Java.sql.date 转换为 Java.util.date 安全吗?

    java sql date 扩展了 java util date 那么通过将 java sql date 转换为 java util date 是否可以在两者之间进行转换 或者有其他方法可以转换它们吗 您不一定需要强制转换 您可以将 SQL

随机推荐

  • nodejs,zip压缩版安装与配置

    下载zip包 下载 Node js 解压 将文件解压到要安装的位置 并新建两个目录node global npm全局安装位置node cache npm 缓存路径 配置环境变量 NODE PATH D Program Files node
  • GridView和CheckBox结合[转]

    效果图 后台代码 Code 1using System 2using System Data 3using System Configuration 4using System Web 5using System Web Security
  • 算法:反转链表 java

    方法1 迭代 public static Node reverseNode Node head 前一个节点 Node pre null 当前节点 Node cur head 如果当前节点不为空 while cur null 存储下一个节点
  • 《数学建模实战攻略:引言》

    一 专栏简介与目标 欢迎来到 数学建模实战攻略 专栏 本专栏旨在帮助初学者 参加数学建模竞赛的学生以及对数学建模感兴趣的研究者和开发者全面了解数学建模的知识体系 掌握建模方法和技巧 提高解决实际问题的能力 本专栏将涵盖数学建模的基本概念 方
  • ALSA信息查看

    1 1 1 查看当前Soc的声卡状态 cat proc asound cards 例如 插入USB声卡之后 会新增声卡节点 USB声卡无声可优先查看该状态 1 1 2 查看当前声卡工作状态 声卡分两种通道 一种是Capture 一种是Pla
  • web的欢迎资源文件

    欢迎资源文件 1 前提 用户可以记住网站名 但是不会记住网站资源文件名 2 默认欢迎资源文件 用户发送了一个针对某个网站的 默认请求 时 此时由Http服务器自动从当前网站返回的资源文件 正常请求 http localhost 8080 m
  • 关于Electron 串口通讯serialport 打包的问题

    请教各位大佬一下 我使用serialport模块 程序编译后正常运行 但是无法打包 目前搞不清楚原因 特来请教 PS C Users appyjj Desktop cart gt npm run build gt cart 1 0 0 bu
  • 学会项目成本管理计算,PMP计算题就是送分题

    学会项目成本管理计算 PMP计算题就是送分题 PMP中的计算主要在 lt 项目成本管理 gt 的控制成本部分 服务于挣值管理 EVM Earned Value Management 挣值分析 EVA Earned Value Analysi
  • MySQL学习日记day04(索引、视图、DBA常用命令、数据库设计三范式)

    目录 一 索引 index 1 什么是索引 2 索引的实现原理 3 在mysql当中 主键上 以及unique字段上都会自动添加索引的 4 索引怎么创建 怎么删除 语法是什么 5 在mysql当中 怎么查看一个SQL语句是否使用了索引进行检
  • Node.js 下载安装环境配置 - 图文版

    Node js 是一个开源 跨平台的 JavaScript 运行时环境 一 介绍 1 官方文档 1 中文文档 Node js 中文网 2 英文文档 Node js 二 下载 1 中文 2 英文 编辑三 安装 1 新建一个文件夹作为安装路径
  • Win11家庭版怎么开启远程桌面

    Win11家庭是专为家庭用户准备的版本 由于Win11系统是一款全新的系统 很多用户对一些功能还不是很熟悉 那么Win11家庭版怎么开启远程桌面 下面就来看看详细教程 Win11家庭版开启远程桌面教程 1 首先 我们需要先下载安装一款远程桌
  • 黑马程序员--多线程

    黑马程序员 多线程 Java培训 Android培训 iOS培训 Net培训 期待与您交流 一 定义 进程 是一个正在执行中的程序 每一个进程执行都有一个执行顺序 该顺序是一个执行路径或叫控制单元 线程 进程中的一个独立的控制单元 线程在控
  • Ubuntu32位安装VSCODE

    Ubuntu32位安装VSCODE vscode自1 36版本后停止支持32位linux系统 所以要使用 lt 1 36版本 vscode所有版本下载地址 https code visualstudio com updates v1 33
  • ubuntu12.04搭建CUDA4.2开发环境

    实验室老师让调试一个DeepLearning的程序 叫做DropConnecte 必须要在64bit的Linux系统上运行 还要配置CUDA 本人比较笨 重装了好多次Ubuntu之后才整成功 特把整理的资料发到这里 1 动态链接库解决方案h
  • Ubuntu和vmware前期设置教程

    系统删除不要从左侧一栏删除 从菜单栏虚拟机 管理 从磁盘删除 ubuntu版本下载地址 清华镜像源 https mirrors tuna tsinghua edu cn ubuntu releases vmware tools 安装教程 h
  • YOLOv5-Lite 使用笔记

    目录 开源一些有用信息 推理部分代码提取出来 不依赖第三方库 c opencv onnx 推理
  • SQL-DAY 9(SQL应用案例:电商用户、商品、平台价值分析)

    文章目录 1 项目背景 2 使用 人货场 拆解方式建立指标体系 3 确认问题 4 准备工作 4 1 数据读取 用户行为数据 4 2 数据预处理 5 指标体系建设 5 1 用户指标体系 5 1 1 基础指标 5 1 2 RFM模型分析 5 2
  • 11月3日文章推荐

    文章目录 1 演讲 1 1 John Edward Hopcroft 开放科学 科学传播与人才培养 2 人物 2 1 John Edward Hopcroft 2 2 吴天齐 2 3 Johnson Kuan 2 4 陶中恺 3 新闻 3
  • MOS管应用---电源开关、电平转换、防反接、全桥变换器

    MOS管应用 电源开关 电平转换 防反接 全桥变换器 1 PMOS作电源开关 Q2也可以用光耦替代 电容C1 电阻R2延长MOS管导通 截止时间 实现软开启 soft start 功能 充电时间3到4个R2 C2 2 NMOS作双向电平转换
  • Java 对象序列化

    目录 一 序列化 定义 方法 代码 二 反序列化 定义 方法 代码 三 自定义类序列化 步骤 代码 一 序列化 定义 将内存中的Java对象保存到磁盘中或通过网络传输过去 方法 使用过ObjectOutputStream类实现 另外 Obj