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

白色玫瑰 程序猿

时间: 2023-05-22 阅读: 1 字数:3230

{}
java序列化

目录

文章目录

<a href="#Java_1">一、Java序列化概述</a> <a href="#_7">二、什么时候用序列化?</a> <a href="#_13">三、项目创建很多对象怎么优化?</a>

<a href="#_14">场景:</a>    <a href="#_19">优化思路一:加条件判断</a>    <a href="#clone_22">优化思路二:使用clone浅拷贝</a>      

一、Java序列化概述

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

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

二、什么时候用序列化?

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

大佬在线解答交流圈子,783092701

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

场景:

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

优化思路一:加条件判断

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

优化思路二:使用clone浅拷贝

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

对于需要频繁创建的实体类,需要实现Serializable和Cloneable接口 在此实体类中写一个getInstance(),其中就是返回clone() 在方法中新建对象的时候,直接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();
}

原文地址:https://blog.csdn.net/paulwang040/article/details/128692414?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168475005516800192223743%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168475005516800192223743&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-128692414-null-null.142^v87^insert_down28v1,239^v2^insert_chatgpt&utm_term=java%E4%BC%98%E5%8C%96

本文章网址:https://www.sjxi.cn/detil/ed38b0dfa6a04711b1ffa79aaa981768

打赏作者

本站为非盈利网站,如果您喜欢这篇文章,欢迎支持我们继续运营!

最新评论
当前未登陆哦
登陆后才可评论哦

湘ICP备2021009447号

×

(穷逼博主)在线接单

QQ: 1164453243

邮箱: abcdsjx@126.com

前端项目代做
前后端分离
Python 爬虫脚本
Java 后台开发
各种脚本编写
服务器搭建
个人博客搭建
Web 应用开发
Chrome 插件编写
Bug 修复