Java序列化常见的三个问题

 更新时间:2020年08月14日 10:51:43   作者:xcbeyond  
这篇文章主要介绍了Java序列化常见的三个问题,帮助大家更好的理解和学习JAVA,感兴趣的朋友可以了解下

1、Java序列化与反序列化是什么?

Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程:

  • 序列化:对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传递性。序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。核心作用是对象状态的保存与重建。
  • 反序列化:客户端从文件中或网络上获得序列化后的对象字节流,根据字节流中所保存的对象状态及描述信息,通过反序列化重建对象。

2、为什么需要序列化与反序列化?

为什么要序列化,那就是说一下序列化的好处喽,序列化有什么什么优点,所以我们要序列化。

一:对象序列化可以实现分布式对象。

主要应用例如:RMI(即远程调用Remote Method Invocation)要利用对象序列化运行远程主机上的服务,就像在本地机上运行对象时一样。

二:java对象序列化不仅保留一个对象的数据,而且递归保存对象引用的每个对象的数据。

可以将整个对象层次写入字节流中,可以保存在文件中或在网络连接上传递。利用对象序列化可以进行对象的"深复制",即复制对象本身及引用的对象本身。序列化一个对象可能得到整个对象序列。

三:序列化可以将内存中的类写入文件或数据库中。

比如:将某个类序列化后存为文件,下次读取时只需将文件中的数据反序列化就可以将原先的类还原到内存中。也可以将类序列化为流数据进行传输。

总的来说就是将一个已经实例化的类转成文件存储,下次需要实例化的时候只要反序列化即可将类实例化到内存中并保留序列化时类中的所有变量和状态。

四:对象、文件、数据,有许多不同的格式,很难统一传输和保存。

序列化以后就都是字节流了,无论原来是什么东西,都能变成一样的东西,就可以进行通用的格式传输或保存,传输结束以后,要再次使用,就进行反序列化还原,这样对象还是对象,文件还是文件。

3、如何实现Java序列化与反序列化

首先我们要把准备要序列化类,实现 Serializabel接口

例如:我们要Person类里的name和age都序列化

import java.io.Serializable;


public class Person implements Serializable { //本类可以序列化

  private String name;
  private int age;

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

  public String toString() {
    return "姓名:" + this.name + ",年龄" + this.age;
  }
}

然后:我们将name和age序列化(也就是把这2个对象转为二进制,理解为“打碎”)

package org.lxh.SerDemo;

import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;


public class ObjectOutputStreamDemo { //序列化
  public static void main(String[] args) throws Exception {
    //序列化后生成指定文件路径
    File file = new File("D:" + File.separator + "person.ser");
    ObjectOutputStream oos = null;
    //装饰流(流)
    oos = new ObjectOutputStream(new FileOutputStream(file));

    //实例化类
    Person per = new Person("张三", 30);
    oos.writeObject(per); //把类对象序列化
    oos.close();
  }
}

以上就是Java序列化常见的三个问题的详细内容,更多关于Java序列化 的资料请关注脚本之家其它相关文章!

相关文章

  • Springboot创建子父工程过程图解

    Springboot创建子父工程过程图解

    这篇文章主要介绍了Springboot创建子父工程过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Java中ExecutorService和ThreadPoolExecutor运行原理

    Java中ExecutorService和ThreadPoolExecutor运行原理

    本文主要介绍了Java中ExecutorService和ThreadPoolExecutor运行原理,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • java实现简单的五子棋游戏

    java实现简单的五子棋游戏

    这篇文章主要为大家详细介绍了java实现简单的五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Java Object定义三个点实现代码

    Java Object定义三个点实现代码

    这篇文章主要介绍了Java Object定义三个点实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • SpringBoot停止启动时测试检查rabbitmq操作

    SpringBoot停止启动时测试检查rabbitmq操作

    这篇文章主要介绍了SpringBoot停止启动时测试检查rabbitmq操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java8中Optional操作的实际应用

    Java8中Optional操作的实际应用

    Optional类是一个可以为null的容器对象,如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象,下面这篇文章主要给大家介绍了关于Java8中Optional操作实际应用的相关资料,需要的朋友可以参考下
    2022-02-02
  • Maven项目在new module后,pom文件显示为Ignored pom.xml问题

    Maven项目在new module后,pom文件显示为Ignored pom.xml问题

    在Maven项目中,若创建过同名module后删除,再次创建时可能导致pom.xml文件被IDEA忽略,原因是IDEA保留了之前module的痕迹,导致重建时将其视为已删除的module,解决方法是进入IDEA设置,找到Maven的Ignored Files设置
    2024-09-09
  • SpringBoot+VUE实现前后端分离的实战记录

    SpringBoot+VUE实现前后端分离的实战记录

    这篇文章主要介绍了SpringBoot+VUE实现前后端分离的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 使用Spring Security和JWT实现安全认证机制

    使用Spring Security和JWT实现安全认证机制

    在现代 Web 应用中,安全认证和授权是保障数据安全和用户隐私的核心机制,Spring Security 是 Spring 框架下专为安全设计的模块,具有高度的可配置性和扩展性,而 JWT则是当前流行的认证解决方案,所以本文介绍了如何使用Spring Security和JWT实现安全认证机制
    2024-11-11
  • Java基础入门之switch怎么使用枚举

    Java基础入门之switch怎么使用枚举

    在Java开发中,switch语句是一种常用的流控制语句,而当使用枚举类型作为条件时,我们常常会遇到报错问题,那么该如何解决呢,下面就来详细讲讲
    2023-06-06

最新评论