java序列化

java安全(五)java反序列化 序列化 在调用RMI时,发现接收发送数据都是反序列化数据. 例如JSON和XML等语言,在网络上传递信息,都会用到一些格式化数据,大多数处理方法中,JSON和XML支持的数据类型就是基本数据类型,整型、浮点型、字符串、布尔等,如果开发者希望在传输数据的时候直接传输一个对象,那么就不得不想办法扩展基础的JSON(XML)语法。比如,Jackson和Fastjson这类序列化库,在JSON(XML)的基础上进行改造,通过特定的语法来传递对象. RMI使用java等语言内置的序列化方法,将一个对象转化成一串二进制 阅读详情

什么是java序列化与反序列化

  • 序列化:把java对象通过某种方式写入磁盘,或者传输给其他网络节点。即将对象转为二进制的过程。
  • 反序列化:把磁盘中的文件,或者网络节点的数据通过某种方式转为java对象。即将二进制转为对象。

java序列化的使用场景

通过上面序列化的定义,可以初步了解序列化的使用场景。

  • 将内存中的数据保存到磁盘或者数据库中。
  • 需要在网络中传输对象。
  • 想通过RMI传输对象。

java序列化实例

下面直接上代码,通过代码实例学习如何实现序列化。

创建实体

为了深入理解实现序列化与反序列化,首先创建几个实体。
User.java、Person.java、OtherInfo.java,他们的关系是User.java中引用了OtherInfo.java,User.java继承了Person.java。三个实体都有get/set/toString方法,方便查看测试效果。

为何创建创建这三个实体呢?

  • 测试是否能序列化父类的数据
  • 测试是否能序列化引用类型的数据

代码如下:

User.java

package org.ludk.serializable;

import java.io.Serializable;

/**
 * @author ludengke
 * @title: User
 * @projectName springcloud-demo
 * @description: TODO
 * @date 2021/10/2420:14
 */
public class User extends Person  {
    private String name;
    private int age;
    private OtherInfo otherInfo;

    public User(String name, int age, OtherInfo otherInfo) {
        this.name = name;
        this.age = age;
        this.otherInfo = otherInfo;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", otherInfo=" + otherInfo +
                '}'+
                super.toString();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public OtherInfo getOtherInfo() {
        return otherInfo;
    }

    public void setOtherInfo(OtherInfo otherInfo) {
        this.otherInfo = otherInfo;
    }
}

OtherInfo.java

package org.ludk.serializable;

import java.io.Serializable;

/**
 * @author ludengke
 * @title: OtherInfo
 * @projectName springcloud-demo
 * @description: TODO
 * @date 2021/10/2420:15
 */
public class OtherInfo  {
    private String ph;
    private String address;

    public OtherInfo(String ph, String address) {
        this.ph = ph;
        this.address = address;
    }

    @Override
    public String toString() {
        return "OtherInfo{" +
                "ph='" + ph + '\'' +
                ", address='" + address + '\'' +
                '}';
    }

    public String getPh() {
        return ph;
    }

    public void setPh(String ph) {
        this.ph = ph;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

Person.java

package org.ludk.serializable;

import java.io.Serializable;

/**
 * @author ludengke
 * @title: Person
 * @projectName springcloud-demo
 * @description: TODO
 * @date 2021/10/2420:18
 */
public class Person  {
    private String head;
    private String body;

    @Override
    public String toString() {
        return "Person{" +
                "head='" + head + '\'' +
                ", body='" + body + '\'' +
                '}';
    }

    public String getHead() {
        return head;
    }

    public void setHead(String head) {
        this.head = head;
    }

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }
}

java序列化与反序列化工具类

SerializableUtil.java

package org.ludk.serializable;

import java.io.*;

/**
 * @author ludengke
 * @title: SerializableUtil
 * @projectName springcloud-demo
 * @description: 克隆的工具类
 * @date 2021/10/2420:24
 */
public class SerializableUtil {
    /**
    *@Description 保存对象,序列化
    *@Param [object]
    *@Return void
    *@Author ludengke
    *@Date 2021/10/24
    *@Time 20:29
    */
    public static void saveObject(Object object){
        ObjectOutputStream objectOutputStream=null;
        FileOutputStream fileOutputStream=null;
        try {
            fileOutputStream=new FileOutputStream("D:\\work\\test\\serializable\\writeToFile.txt");
            objectOutputStream=new ObjectOutputStream(fileOutputStream);
            objectOutputStream.writeObject(object);
            objectOutputStream.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                objectOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    /**
    *@Description 读对象,反序列化
    *@Param []
    *@Return java.lang.Object
    *@Author ludengke
    *@Date 2021/10/24
    *@Time 20:36
    */
    public static Object readObject(){
        ObjectInputStream objectInputStream=null;
        FileInputStream fileInputStream=null;
        try {
            fileInputStream=new FileInputStream("D:\\work\\test\\serializable\\writeToFile.txt");
            objectInputStream=new ObjectInputStream(fileInputStream);
            return objectInputStream.readObject();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }finally {
            try {
                objectInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    } 
}

测试类

TestSerializable.java

package org.ludk.serializable;

/**
 * @author ludengke
 * @title: TestSerializable
 * @projectName springcloud-demo
 * @description: TODO
 * @date 2021/10/2420:19
 */
public class TestSerializable {

    public static void main(String[] args) {
        User user=new User("卢**",35,new OtherInfo("1834156****","北京海淀"));
        user.setHead("大头");
        user.setBody("小身体");
        //打印序列化前的对象
        System.out.println(user);
        //序列化
        SerializableUtil.saveObject(user);
        //反序列化
        User readFromFile=(User) SerializableUtil.readObject();
        //打印通过反序列化生成的对象
        System.out.println(readFromFile);
    }
}

测试与修正的过程

  1. 运行TestSerializable.java的main方法,结果如下:
D:\work\java\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=51808:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\work\java\jre\lib\charsets.jar;D:\work\java\jre\lib\deploy.jar;D:\work\java\jre\lib\ext\access-bridge-64.jar;D:\work\java\jre\lib\ext\cldrdata.jar;D:\work\java\jre\lib\ext\dnsns.jar;D:\work\java\jre\lib\ext\jaccess.jar;D:\work\java\jre\lib\ext\jfxrt.jar;D:\work\java\jre\lib\ext\localedata.jar;D:\work\java\jre\lib\ext\nashorn.jar;D:\work\java\jre\lib\ext\sunec.jar;D:\work\java\jre\lib\ext\sunjce_provider.jar;D:\work\java\jre\lib\ext\sunmscapi.jar;D:\work\java\jre\lib\ext\sunpkcs11.jar;D:\work\java\jre\lib\ext\zipfs.jar;D:\work\java\jre\lib\javaws.jar;D:\work\java\jre\lib\jce.jar;D:\work\java\jre\lib\jfr.jar;D:\work\java\jre\lib\jfxswt.jar;D:\work\java\jre\lib\jsse.jar;D:\work\java\jre\lib\management-agent.jar;D:\work\java\jre\lib\plugin.jar;D:\work\java\jre\lib\resources.jar;D:\work\java\jre\lib\rt.jar;D:\work\springcloud-demo\target\classes org.ludk.serializable.TestSerializable
User{name='卢**', age=35, otherInfo=OtherInfo{ph='1834156****', address='北京海淀'}}Person{head='大头', body='小身体'}
java.io.NotSerializableException: org.ludk.serializable.User
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
	at org.ludk.serializable.SerializableUtil.saveObject(SerializableUtil.java:27)
	at org.ludk.serializable.TestSerializable.main(TestSerializable.java:17)
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.ludk.serializable.User
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1631)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:464)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:422)
	at org.ludk.serializable.SerializableUtil.readObject(SerializableUtil.java:55)
	at org.ludk.serializable.TestSerializable.main(TestSerializable.java:18)
Caused by: java.io.NotSerializableException: org.ludk.serializable.User
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
	at org.ludk.serializable.SerializableUtil.saveObject(SerializableUtil.java:27)
	at org.ludk.serializable.TestSerializable.main(TestSerializable.java:17)
null

Process finished with exit code 0

java.io.NotSerializableException: org.ludk.serializable.User的意思很明显,org.ludk.serializable.User不能被实例化。

结论一:被序列化的对象实体需要实现java.io.Serializable接口,否则会抛NotSerializableException异常

所以让org.ludk.serializable.User实现serializable接口,被调整的部分代码如下:

public class User extends Person implements Serializable {

  1. 再次跑测试类,结果如下:
D:\work\java\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=52041:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\work\java\jre\lib\charsets.jar;D:\work\java\jre\lib\deploy.jar;D:\work\java\jre\lib\ext\access-bridge-64.jar;D:\work\java\jre\lib\ext\cldrdata.jar;D:\work\java\jre\lib\ext\dnsns.jar;D:\work\java\jre\lib\ext\jaccess.jar;D:\work\java\jre\lib\ext\jfxrt.jar;D:\work\java\jre\lib\ext\localedata.jar;D:\work\java\jre\lib\ext\nashorn.jar;D:\work\java\jre\lib\ext\sunec.jar;D:\work\java\jre\lib\ext\sunjce_provider.jar;D:\work\java\jre\lib\ext\sunmscapi.jar;D:\work\java\jre\lib\ext\sunpkcs11.jar;D:\work\java\jre\lib\ext\zipfs.jar;D:\work\java\jre\lib\javaws.jar;D:\work\java\jre\lib\jce.jar;D:\work\java\jre\lib\jfr.jar;D:\work\java\jre\lib\jfxswt.jar;D:\work\java\jre\lib\jsse.jar;D:\work\java\jre\lib\management-agent.jar;D:\work\java\jre\lib\plugin.jar;D:\work\java\jre\lib\resources.jar;D:\work\java\jre\lib\rt.jar;D:\work\springcloud-demo\target\classes org.ludk.serializable.TestSerializable
User{name='卢**', age=35, otherInfo=OtherInfo{ph='1834156****', address='北京海淀'}}Person{head='大头', body='小身体'}
java.io.NotSerializableException: org.ludk.serializable.OtherInfo
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
	at org.ludk.serializable.SerializableUtil.saveObject(SerializableUtil.java:27)
	at org.ludk.serializable.TestSerializable.main(TestSerializable.java:17)
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.ludk.serializable.OtherInfo
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1631)
	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2341)
	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2265)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2123)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1624)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:464)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:422)
	at org.ludk.serializable.SerializableUtil.readObject(SerializableUtil.java:55)
	at org.ludk.serializable.TestSerializable.main(TestSerializable.java:18)
Caused by: java.io.NotSerializableException: org.ludk.serializable.OtherInfo
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
	at org.ludk.serializable.SerializableUtil.saveObject(SerializableUtil.java:27)
	at org.ludk.serializable.TestSerializable.main(TestSerializable.java:17)
null

Process finished with exit code 0

java.io.NotSerializableException: org.ludk.serializable.OtherInfo
这段错误说明OtherInfo也要实现serializable接口。

结论二:引用对象的实体类也需要实现java.io.Serializable接口,否则抛NotSerializableException异常。

调整的部分代码如下:

public class OtherInfo  implements Serializable{

  1. 再次跑测试类,结果如下:
D:\work\java\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=52382:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\work\java\jre\lib\charsets.jar;D:\work\java\jre\lib\deploy.jar;D:\work\java\jre\lib\ext\access-bridge-64.jar;D:\work\java\jre\lib\ext\cldrdata.jar;D:\work\java\jre\lib\ext\dnsns.jar;D:\work\java\jre\lib\ext\jaccess.jar;D:\work\java\jre\lib\ext\jfxrt.jar;D:\work\java\jre\lib\ext\localedata.jar;D:\work\java\jre\lib\ext\nashorn.jar;D:\work\java\jre\lib\ext\sunec.jar;D:\work\java\jre\lib\ext\sunjce_provider.jar;D:\work\java\jre\lib\ext\sunmscapi.jar;D:\work\java\jre\lib\ext\sunpkcs11.jar;D:\work\java\jre\lib\ext\zipfs.jar;D:\work\java\jre\lib\javaws.jar;D:\work\java\jre\lib\jce.jar;D:\work\java\jre\lib\jfr.jar;D:\work\java\jre\lib\jfxswt.jar;D:\work\java\jre\lib\jsse.jar;D:\work\java\jre\lib\management-agent.jar;D:\work\java\jre\lib\plugin.jar;D:\work\java\jre\lib\resources.jar;D:\work\java\jre\lib\rt.jar;D:\work\springcloud-demo\target\classes org.ludk.serializable.TestSerializable
User{name='卢**', age=35, otherInfo=OtherInfo{ph='1834156****', address='北京海淀'}}Person{head='大头', body='小身体'}
User{name='卢**', age=35, otherInfo=OtherInfo{ph='1834156****', address='北京海淀'}}Person{head='null', body='null'}

Process finished with exit code 0

这次不抛异常了,但是父类Person.java的属性没有被序列化,head和body为空。

结论三:父类也要实现java.io.Serializable接口,否则父类的属性不会被序列化。

调整的部分代码如下:

public class Person  implements Serializable{

  1. 再次跑测试类,结果如下:
D:\work\java\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=52500:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\work\java\jre\lib\charsets.jar;D:\work\java\jre\lib\deploy.jar;D:\work\java\jre\lib\ext\access-bridge-64.jar;D:\work\java\jre\lib\ext\cldrdata.jar;D:\work\java\jre\lib\ext\dnsns.jar;D:\work\java\jre\lib\ext\jaccess.jar;D:\work\java\jre\lib\ext\jfxrt.jar;D:\work\java\jre\lib\ext\localedata.jar;D:\work\java\jre\lib\ext\nashorn.jar;D:\work\java\jre\lib\ext\sunec.jar;D:\work\java\jre\lib\ext\sunjce_provider.jar;D:\work\java\jre\lib\ext\sunmscapi.jar;D:\work\java\jre\lib\ext\sunpkcs11.jar;D:\work\java\jre\lib\ext\zipfs.jar;D:\work\java\jre\lib\javaws.jar;D:\work\java\jre\lib\jce.jar;D:\work\java\jre\lib\jfr.jar;D:\work\java\jre\lib\jfxswt.jar;D:\work\java\jre\lib\jsse.jar;D:\work\java\jre\lib\management-agent.jar;D:\work\java\jre\lib\plugin.jar;D:\work\java\jre\lib\resources.jar;D:\work\java\jre\lib\rt.jar;D:\work\springcloud-demo\target\classes org.ludk.serializable.TestSerializable
User{name='卢**', age=35, otherInfo=OtherInfo{ph='1834156****', address='北京海淀'}}Person{head='大头', body='小身体'}
User{name='卢**', age=35, otherInfo=OtherInfo{ph='1834156****', address='北京海淀'}}Person{head='大头', body='小身体'}

Process finished with exit code 0

完美了。
听说静态变量不会被序列化( static,transient),我就不试了。
结论四:静态变量不会被序列化( static,transient)

序列化ID

序列化时一般会加入下面的代码(我没加):

 private static final long serialVersionUID = 1L;

它决定着是否能够成功反序列化!

java的序列化机制是通过判断运行时类的serialVersionUID来验证版本一致性的,在进行反序列化时,JVM会把传进来的字节流中的serialVersionUID与本地实体类中的serialVersionUID进行比较,如果相同则认为是一致的,便可以进行反序列化,否则就会报序列化版本不一致的异常。

因为我测试的时候是用一个实体序列化和反序列化,所以看不出效果。

java序列化总结

  • 被序列化的对象实体需要实现java.io.Serializable接口,否则会抛NotSerializableException异常。

  • 引用对象的实体类也需要实现java.io.Serializable接口,否则抛NotSerializableException异常

  • 父类也要实现java.io.Serializable接口,否则父类的属性不会被序列化。

  • 静态变量不会被序列化( static,transient)

  • 序列化ID应自己写,尽量不自动生成,因为序列化与反序列化的序列化ID应该保持一致

Java中的序列化与反序列化 序列化(Serialization)与反序列化(Deserialization)是编程中常见的两个概念,它们主要涉及到将数据结构或对象状态转换为可以存储或传输的格式,以及将存储或传输的格式转换回原始的数据结构或对象状态的过程。这两个过程在数据持久化、网络通信、对象深拷贝等多个场景中发挥着重要作用。 阅读详情

相关推荐

JAVA中的反序列化

Java 反序列化是序列化的逆过程,它允许程序从字节流中恢复对象状态。这个过程在分布式计算和对象持久化中非常重要。然而,反序列化也带来了安全风险,需要开发者谨慎处理。

qa3629723的博客 983

Java序列化和反序列化(详解)

java序列化及可序列化讲解,代码清晰易懂。

qq_62414755的博客 4万+

Java 序列化

对于 Java 这种面向对象编程语言来说,我们序列化的都是对象(Object)也就是实例化后的类(Class),但是在 C++这种半面向对象的语言中,struct(结构体)定义的是数据结构类型,而 class 对应的是对象类型。因为,OSI 七层协议模型中的应用层、表示层和会话层对应的都是 TCP/IP 四层模型中的应用层,所以序列化协议属于 TCP/IP 协议应用层的一部分。修饰的变量是静态变量,属于类而非类的实例,本身是不会被序列化的。,因为这通常意味着序列化的类的定义已经发生了更改,可能不再兼容。

些许风霜罢了 1233

Java 反序列化漏洞

在各种编程语言的反序列化漏洞中,Java是最引人瞩目的,因为Java的开发生态中各种第三方库组件相互依赖,经常出现开发中常用的基础底层组件出现安全问题时,会引发核弹式反应,进而影响到上层得操作系统。

qq_61553520的博客 5935

【java】java序列化、ArrayList序列化、序列化策略

1、如果一个类想被序列化,需要实现Serializable接口。否则将抛出异常,这是因为,在序列化操作过程中会对类型进行检查,要求被序列化的类必须属于Enum、Array和Serializable类型其中的任何一种。2、在变量声明前加上该关键字,可以阻止该变量被序列化到文件中。3、在类中增加writeObject 和 readObject 方法可以实现自定义序列化策略。

九师兄 987

ros_control硬件接口实战:从零构建机器人控制框架

本文详细介绍了ros_control硬件接口在机器人控制框架中的核心作用与实践方法。通过解析硬件接口类型、实现标准接口、构建主控制循环及自定义功能扩展,帮助开发者从零构建高效的机器人控制系统,提升硬件与ROS的协同效率。

lstm7chronicler的博客 500

java之序列化与反序列化

序列化与反序列化的理解

m0_73866527的博客 1683

ADC选型实战:从参数指标到精准应用的工程指南

本文深入解析ADC(模数转换器)选型的关键参数与实战技巧,涵盖分辨率、转换误差等核心指标,并提供高精度温度测量、高速数据采集等五大应用场景的选型指南。通过实际案例和代码示例,详细讲解校准方法、功耗优化策略及常见问题排查,帮助工程师实现从参数指标到精准应用的工程实践。

weixin_29166013的博客 326

Java中的序列化及序列化ID

参考转载自: 秒懂Java序列化与反序列化 Java的序列化ID的作用 1. 定义 Java的序列化:是指把Java对象转换为字节序列的过程 Java的反序列化:是指把字节序列恢复为Java对象的过程 2. 为什么需要 我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上传送。那么当两个Java进程进行通信时,能否实现进程间的对象传送呢?答案是可以的。如何做到呢?这就需要Java序列化与反序列化了。换句话说,一方面,.

三明治文鱼的博客 5841

汇编语言与接口技术(第4版)清华大学出版社 第2章 80*86微处理器 课后题答案

汇编语言与接口技术(第4版)清华大学出版社 第2章 80*86微处理器 课后题答案

m0_51658788的博客 3606

将ue4程序嵌入qt界面显示

需求:将ue4程序嵌入qt界面显示 思路:通过使用 windowsAPI 对ue4窗口进行设置跟随qt界面以及活动窗口时的位置层序设置

weixin_44342705的博客 5844

【Java】Java序列化和反序列化

为了序列化对象,我们调用ObjectOutputStream类的writeObject()方法,而为了反序列化,则调用ObjectInputStream类的readObject()方法。SerializeISA类已序列化扩展了Person类的Student类对象,而Person类是可序列化的。序列化和反序列化过程是平台无关的,这意味着您可以在一个平台上对对象进行序列化,在另一个平台上进行反序列化。现在,id将不会序列化,因此在序列化之后反序列化对象时,您将不会得到id的值。它是序列化的逆操作。

double222222的博客 1141

win2016 php mysql_Windows Server 2016 IIS10.0+PHP(FastCGI)+MySQL环境搭建教程 | 系统运维...

准备篇一、环境说明:操作系统:Windows Server 2016PHP版本:php 7.1.0MySQL版本:MySQL 5.7.17.0二、相关软件下载:1、PHP下载地址:2、MySQL下载地址:3、Microsoft Visual C++ 2010 可再发行组件包(安装MySQL需要此插件)4、Visual C++ Redistributable for Visual Studio 20...

weixin_34794420的博客 1377

Java 序列化详解

如果我们需要持久化 Java 对象比如将 Java 对象保存在文件中,或者在网络传输 Java 对象,这些场景都需要用到序列化。序列化:将数据结构或对象转换成可以存储或传输的形式,通常是二进制字节流,也可以是 JSON, XML 等文本格式反序列化:将在序列化过程中所生成的数据转换为原始数据结构或者对象的过程。

hezhixiang202100的博客 1113

GEE案例教程:融合Sentinel-1 SAR数据、Sentinel-2光学影像和WorldPop人口数据,构建完整的洪水监测与影响评估工作流

本文介绍了一个专为巴基斯坦哈扎拉分区设计的洪水监测系统,该系统整合了Sentinel-1 SAR数据、Sentinel-2光学影像和WorldPop人口数据等多源遥感数据。系统通过VV极化SAR数据的水体提取算法(阈值-13dB)实现洪水范围监测,结合10米分辨率的光学影像进行可视化验证,并利用100米分辨率人口数据评估受灾人口。系统提供完整的技术实现,包括研究区加载、遥感数据处理、日期选择界面和洪水变化检测等功能模块,为灾害应急响应提供科学依据。

此星光明博客 191

锂电池SOH估计 | 锂电池SOH基础计算与可视化(Python)

锂电池SOH估计 | 锂电池SOH基础计算与可视化(Python)

前程算法屋的博客 900

什么是Java序列化,如何实现java序列化

什么是Java序列化,如何实现java序列化 简要解释:  序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。  序列化是为了解决在对对象流进行读写操作时所...

533

迟滞比较器原理及计算

为什么要用迟滞比较器 在讲迟滞比较器之前,我们先看一个案例。 在产品设计中常常需要用到电机,而电机在从运转到停止过程中需要泄放能量,这种能量大部分以电压的形式反馈回电源母线(Vbus)导致Vbus母线电压升高,特别是功率大又转速快的电机需要急刹时,产生的反馈电压更高,严重时可能导致母线上其他器件的损坏。 为了防止将电机反馈的能量泄放掉,我们需要设计一个电路来检测母线电压,当母线电压高于某一安全阈值时,打开MOSFET Q1将母线上的能量通过电阻R5以热的形式消耗掉。 假如用一般的比较器,设计如下: Vbu

sinat_15677011的博客 2万+

什么是java序列化,如何实现java序列化?

Java序列化:把Java对象转换为二进制的数据流流。  反序列化就是把字节序列恢复为Java对象的过程。      实现:将需要序化的类实现Serializable接口就可以了,该接口没有任何方法,可以理解为一个标记,即表明这个类可以序列化。注意的是被关键字static、transient修饰的变量不能被序列化。在被序列化后,transient修饰的变量会被设为初始值。如int型的是0、对象型

m_h7769的博客 2396

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

从Java序列化到Hadoop序列化

一个原生的类讲解一下,自定义比较器讲解一下,内部类讲解一下。WritableComparator是 WritableComparables的比较器。这个基础实现类使用是自然的排序规则,如果要使用其他的排序规则,需要重写compare(WritableComparable,WritableComparable)方法。

Jenny19992018的博客 590

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

java序列化指的是什么,java的序列化是什么

序列化:指堆内存中的java对象数据,通过某种方式把对存储到磁盘文件中,或者传递给其他网络节点(网络传输)。这个过程称为序列化,通常是指将数据结构或对象转化成二进制的过程。 (推荐学习:java课程)即将对象转化为二进制,用于保存,或者网络传输。序列化的作用① 想把内存中的对象保存到一个文件中或者数据库中时候;② 想用套接字在网络上传送对象的时候;③ 想通过RMI传输...

weixin_39820226的博客 2019

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Java序列化与反序列化

*序列化(Serialization)**是将对象的状态信息转换为可以存储或传输的形式的过程。在Java中,序列化是将对象转换为字节序列的过程。**反序列化(Deserialization)**是将序列化的字节序列恢复为对象的过程。序列化:对象 → 字节流反序列化:字节流 → 对象通过实现和readObject// 不序列化密码// 自定义序列化// 调用默认序列化// 对密码进行加密后再序列化// 自定义反序列化// 调用默认反序列化// 解密密码。

weixin_74417835的博客 1378
上一篇: java克隆
下一篇: JVM的学习笔记
ludkjava
博客等级 码龄11年 173粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值