iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java序列化与反序列化怎么应用
  • 126
分享到

Java序列化与反序列化怎么应用

2023-07-05 20:07:14 126人浏览 安东尼
摘要

这篇“Java序列化与反序列化怎么应用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java序列化与反序列化怎么应用”文章吧

这篇“Java序列化与反序列化怎么应用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java序列化与反序列化怎么应用”文章吧。

    Java 序列化与反序列化

    Java序列化把一个对象Java Object变为一个二进制字节序列byte[]

    Java反序列化就是把一个二进制字节序列byte[] 变为Java对象Java Object

    序列化api

    ObjectOutputStream

    字节输出流对象,将对象的输出流写到文件中(结合FileOutputStream使用)

    实例:

    ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("1.txt"));或FileOutputStream fout = new FileOutputStream("1.txt");ObjectOutputStream out = new ObjectOutputStream(fout);

    此外ObjectOutputStream还提供了writeObject()方法来序列化一个对象,并将它发送到输出流。

    ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("1.txt"));out.writeObject(new Test("Sentiment",10));        //对Test类中的构造方法进行传参

    ObjectInputStream

    字节输入流对象,将文件中的二进制字节序列进行反序列化操作(结合FileInputStream)

    实例:

    ObjectInputStream in = new ObjectInputStream(new FileInputStream("1.txt"));或FileInputStream fin = new FileInputStream("1.txt");ObjectInputStream oin = new ObjectInputStream(fin);

    此外ObjectInputStream还提供readObject()方法从流中取出下一个对象,并将对象反序列化。它的返回值为Object,因此,需要将它转换成合适的数据类型。

    ObjectInputStream In = new ObjectInputStream(new FileInputStream("1.txt"));Test o = (Test)In.readObject();System.out.println(o);        //读取后输出实例理解

    实例理解

    Test.java(类想要进行序列化操作,必须实现Serializable接口继承)

    package Sentiment.unserialize.demo01;import java.io.Serializable;public class Test implements Serializable {    private String name;    private int age;    public Test() {    }    public Test(String name, int age) {        this.name = name;        this.age = age;    }    @Override    public String toString() {        return "Test{" + "name='" + name + '\'' + ", age=" + age + '}';    }}

    Serializable.java

    package Sentiment.unserialize.demo01;import java.io.*;public class Serializable {    public static void main(String[] args) throws IOException {        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("1.txt"));        out.writeObject(new Test("Sentiment",10));        out.close();    }}

     UnSerializable.java

    package Sentiment.unserialize.demo01;import java.io.FileInputStream;import java.io.IOException;import java.io.ObjectInputStream;public class UnSerializable {    public static void main(String[] args) throws IOException, ClassNotFoundException {        ObjectInputStream In = new ObjectInputStream(new FileInputStream("1.txt"));        Test o = (Test)In.readObject();        System.out.println(o);    }}

    运行Serializable.java后便得到二进制字节码文件内容

    Java序列化与反序列化怎么应用

    此时在运行UnSerializable.java便得到了二进制字节码反序列化后的内容

    Java序列化与反序列化怎么应用

    serialVersionUID

    • 每个可序列化的类在序列化时都会关联一个版本号 , 这个版本号就是 serialVersionUID 属性

    • serialVersionUID 属性必须通过 static final long 修饰符来修饰 。

    • 如果可序列化的类未声明 serialVersionUID 属性 , 则 Java 序列化时会根据类的各种信息来计算默认的 serialVersionUID 值 . 但是 oracle 官方文档强烈建议所有可序列化的类都显示声明 serialVersionUID 值 .

    实例理解

    在Test.java中定义serialVersionUID 其值为1

    package Sentiment.unserialize.demo01;import java.io.Serializable;public class Test implements Serializable {    public static final long serialVersionUID = 1L;   //定义serialVersionUID     private  String name;    private  int age;    public Test() {    }    public Test(String name, int age) {        this.name = name;        this.age = age;    }    @Override    public String toString() {        return "Test{" + "name='" + name + '\'' + ", age=" + age + '}';    }}

    此时运行Serializable.java进行序列化操作

    运行完毕后将serialVersionUID的值定义为2—>public static final long serialVersionUID = 2L;,在运行UnSerializable.java会报错

    Java序列化与反序列化怎么应用

    Transient (瞬态变量)

    Transient( 瞬态变量 )是一个 Java 关键词 , 它用于标记类的成员变量在持久化到字节流时不要被序列化 ; 在通过网络套接字流传输字节流时 , transient 关键词标记的成员变量不会被序列化 。此为被static修饰的静态变量也不参与序列化操作。

    实例理解

    将Test.java中的nameage变量前分别加上transientstatic

    package Sentiment.unserialize.demo01;import java.io.Serializable;public class Test implements Serializable {    public static final long serialVersionUID = 1L;  //定义serialVersionUID     private transient String name;                     //加上transient    private static int age;                             //加上static    public Test() {    }    public Test(String name, int age) {        this.name = name;        this.age = age;    }    @Override    public String toString() {        return "Test{" + "name='" + name + '\'' + ", age=" + age + '}';    }}

    此时在执行Serializable.java和UnSerializable.java,输出结果:Sentiment—>null,10—>0

    Java序列化与反序列化怎么应用

    readObject()方法重写

    官方允许用户在被序列化的类中重写 readObject() 方法 , 重写后的方法将负责在反序列化时重构当前类对象 . 用户只需要在重写的 readObject() 方法中实现 defaultReadObject() 方法 , 就可以确保反序列化过程正常执行 .

    实例理解

    实现 defaultReadObject() 方法调用,并在Test类中重写该方法,在进行序列化和反序列化操作即可执行命令

    private void readObject(java.io.ObjectInputStream a) throws IOException, ClassNotFoundException{    a.defaultReadObject();    Runtime.getRuntime().exec("calc.exe");}

    Java序列化与反序列化怎么应用

    以上就是关于“Java序列化与反序列化怎么应用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

    --结束END--

    本文标题: Java序列化与反序列化怎么应用

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

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

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Java序列化与反序列化怎么应用
      这篇“Java序列化与反序列化怎么应用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java序列化与反序列化怎么应用”文章吧...
      99+
      2023-07-05
    • Java序列化与反序列化
      目录Java 序列化与反序列化序列化APIObjectOutputStreamObjectInputStreamserialVersionUIDTransient (瞬态变量)实例理...
      99+
      2023-05-14
      Java序列化 Java反序列化
    • Java序列化与反序列化怎么实现
      本篇内容主要讲解“Java序列化与反序列化怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java序列化与反序列化怎么实现”吧!序列化与反序列化概念序列化 (Serialization)是...
      99+
      2023-06-02
    • 序列化与反序列化
      序列化(pickling)   把变量从内存中变成可存储或传输的过程 反序列化(unpickling)   把变量内容从序列化的对象重新读到内存里的过程 序列化&反序列化的意义  在程序运行过程中,对象可在内存中被自由的修改  一...
      99+
      2023-01-31
      序列 化与 序列化
    • Java的序列化与反序列化怎么实现
      本篇内容介绍了“Java的序列化与反序列化怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java对象的序列化Java平台允许我们在内...
      99+
      2023-07-04
    • [Java反序列化]—Shiro反序列化(一)
      环境配置:  IDEA搭建shiro550复现环境_普通网友的博客-CSDN博客 漏洞原理: Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。在服务端对remem...
      99+
      2023-09-03
      java 开发语言
    • 【反序列化漏洞-01】序列化与反序列化概述
      为什么要序列化 百度百科上关于序列化的定义是,将对象的状态信息转换为可以存储或传输的形式(字符串)的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区(非关系型键值对形式的数据库Redis,与数组类似)。以后,可以通过从存储区中...
      99+
      2023-09-06
      web安全 安全 反序列化 序列化 PHP反序列化漏洞 Powered by 金山文档
    • 深入理解Java序列化与反序列化
      目录一、前言1.1 String1.2 Integer二、案例2.1 编写大象类2.2 大象测试类三、运行结果一、前言 序列化:将对象转换为二进制序列在网络中传输或保存到磁盘 反序列...
      99+
      2024-04-02
    • java中序列化与反序列化的作用是什么
      Java中的序列化和反序列化是用来实现对象的持久化存储和网络传输的机制。序列化的作用:1. 对象持久化存储:将Java对象转换为字节...
      99+
      2023-09-15
      java
    • 怎么在python中使用序列化与反序列化
      这篇文章将为大家详细讲解有关怎么在python中使用序列化与反序列化,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python有哪些常用库python常用的库:1.requesuts;2.s...
      99+
      2023-06-14
    • JavaScript中怎么用JSON来序列化与反序列化
      小编给大家分享一下JavaScript中怎么用JSON来序列化与反序列化,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!用JSON...
      99+
      2024-04-02
    • 【Java 基础篇】Java序列化与反序列化详解
      文章目录 导言一、序列化与反序列化的原理二、序列化与反序列化的使用方法1、序列化对象2、反序列化对象 三、序列化与反序列化的应用场景1、持久化存储2、网络传输3、缓存机制 总结 ...
      99+
      2023-10-08
      java jvm 开发语言
    • Python中怎么实现序列化与反序列化
      这篇文章给大家介绍Python中怎么实现序列化与反序列化,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Python序列化与反序列在程序运行的过程中,所有的变量都是在内存中,比如,定义一个 dict:d =&n...
      99+
      2023-06-15
    • Java对象的序列化与反序列化详解
      一、序列化和反序列化的概念把对象转换为字节序列的过程称为对象的序列化,把字节序列恢复为对象的过程称为对象的反序列化。对象的序列化主要有两种途径:Ⅰ . 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中Ⅱ.  在网络上传送对...
      99+
      2023-05-31
      java 序列化 反序列化
    • Java基础之序列化与反序列化详解
      目录1、什么是序列化与反序列化?2、Java如何实现序列化和反序列化?3、如何自定义序列化和反序列化呢?4、writeObject和readObject方法5、serializabl...
      99+
      2024-04-02
    • Java序列化和反序列化(详解)
      一、理解Java序列化和反序列化 Serialization(序列化):将java对象以一连串的字节保存在磁盘文件中的过程,也可以说是保存java对象状态的过程。序列化可以将数据永久保存在磁盘上(通常保存在文件中)。 deserializa...
      99+
      2023-09-11
      java 开发语言
    • java序列化与反序列化的使用方法汇总
      一、概念        java对象序列化的意思就是将对象的状态转化成字节流,以后可以通过这些值再生成相同状态的对象。对象...
      99+
      2024-04-02
    • java序列化和反序列化有什么作用
      Java的序列化和反序列化主要用于以下几个方面:1. 数据持久化:可以将Java对象转化为字节序列,并将其写入文件或者数据库,从而实...
      99+
      2023-09-25
      java
    • C#实现XML序列化与反序列化
      目录一、使用 System.Xml.Serialization类1、定义元数据2、简单序列化与反序列化3、集合的序列化与反序列化4、在不能更改数据的情况下,可以用代码重载 XmlAt...
      99+
      2024-04-02
    • 深入浅析Java中的序列化与反序列化
      这篇文章将为大家详细讲解有关深入浅析Java中的序列化与反序列化,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java 序列化和反序列化实例详解在分布式应用中,对象只有经过序列化才能在各个分...
      99+
      2023-05-31
      java 序列化 反序列化
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作