java什么时候需要用序列化?

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录

一、Java序列化概述

简单说就是为了保存在内存中的各种对象的状态也就是实例变量不是方法并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存objectstates但是Java给你提供一种应该比你自己好的保存对象状态的机制那就是序列化。

  • 序列化将Java对象转换成字节流的过程。
  • 反序列化将字节流转换成Java对象的过程。
    当Java对象需要在网络上传输或者持久化存储到文件中时就需要对Java对象进行序列化处理。
  • 序列化的实现类实现Serializable接口这个接口没有需要实现的方法。实现Serializable接口是为了告诉jvm这个类的对象可以被序列化。

二、什么时候用序列化

  1. 当你想把的内存中的对象状态保存到一个文件中或者数据库中时候
  2. 当你想用套接字在网络上传送对象的时候
  3. 当你想通过RMI传输对象的时候。

三、项目创建很多对象怎么优化

场景:

  1. 当一个类存在继承关系时你创建一个子类的对象时如果在没有明确指定的情况下子类是会隐式的去调用父类的无参构造的。假设我们需要频繁创建的对象是一个继承关系比较深的类的话调用构造函数的开销不容小窥。
    如果一时间内频繁创建某对象时这些平时不显眼的消耗一叠加起来就变得很客观了。但是当我们使用clone的话就可以避免这个问题。
  2. 大数据开发消费kafka后实例化到对象上频繁创建对象。

优化思路一加条件判断

假如创建的对象需要在 if 判断条件中使用则在 if 判断条件中new新对象这样可以减少对象的创建。

优化思路二使用clone浅拷贝

clone的最大特点就是不会去调用任何构造方法

  1. 对于需要频繁创建的实体类需要实现Serializable和Cloneable接口
  2. 在此实体类中写一个getInstance()其中就是返回clone()
  3. 在方法中新建对象的时候直接getInstance()就可以。
import lombok.Data;
import java.io.Serializable;

@Data
public class User implements Serializable,Cloneable{

    private static final long serialVersionUID = 1L;
    private static User  user = new User();
    /**
     * 用户id
     */
    private Long userId;
    /**
     * 用户名称
     */
    private String userName;
    /**
     * 调用对象创建优化
     * @return
     */
    public static User getInstance(){
        try {
            return (User) user.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return new User();
    }
}
if (flag) {
     // 将创建对象放到if中不进入if则不创建提高效率
     //SysMenuManagerGrant grant = new SysMenuManagerGrant();
     User user = User.getInstance();
}
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Java