首页 > 编程语言 >JAVA 序列化(创建可复用的 Java 对象)

JAVA 序列化(创建可复用的 Java 对象)

时间:2023-07-26 11:37:21浏览次数:49  
标签:JAVA 变量 对象 保存 JVM Java 序列化

保存(持久化)对象及其状态到内存或者磁盘 Java 平台允许我们在内存中创建可复用的 Java 对象,但一般情况下,只有当 JVM 处于运行时,这些对 象才可能存在,即,这些对象的生命周期不会比 JVM 的生命周期更长。但在现实应用中,就可能要求在 JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象。 Java 对象序列化就能够帮助我们实现该功能。 序列化对象以字节数组保持-静态成员不保存 使用 Java 对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装成对 象。必须注意地是,对象序列化保存的是对象的”状态”,即它的成员变量。由此可知,对象序列化不会 关注类中的静态变量。 序列化用户远程对象传输 除了在持久化对象时会用到对象序列化之外,当使用 RMI(远程方法调用),或在网络中传递对象时,都 会用到对象序列化。Java序列化API为处理对象序列化提供了一个标准机制,该API简单易用。 Serializable 实现序列化 在 Java 中,只要一个类实现了 java.io.Serializable 接口,那么它就可以被序列化。 ObjectOutputStreamObjectInputStream 对对象进行序列化及反序列化 通过 ObjectOutputStream 和 ObjectInputStream 对对象进行序列化及反序列化。 writeObjectreadObject 自定义序列化策略 在类中增加 writeObject 和 readObject 方法可以实现自定义序列化策略。 序列化 ID 虚拟机是否允许反序列化,不仅取决于类路径和功能代码是否一致,一个非常重要的一点是两个类的序 列化 ID 是否一致(就是 private static final long serialVersionUID) 序列化并不保存静态变量序列化子父类说明 要想将父类对象也序列化,就需要让父类也实现 Serializable 接口。 Transient 关键字阻止该变量被序列化到文件中 1. 在变量声明前加上 Transient 关键字,可以阻止该变量被序列化到文件中,在被反序列化后, transient 变量的值被设为初始值,如 int 型的是 0,对象型的是 null。 2. 服务器端给客户端发送序列化对象数据,对象中有一些数据是敏感的,比如密码字符串等,希望对 该密码字段在序列化时,进行加密,而客户端如果拥有解密的密钥,只有在客户端进行反序列化 时,才可以对密码进行读取,这样可以一定程度保证序列化对象的数据安全。

标签:JAVA,变量,对象,保存,JVM,Java,序列化
From: https://www.cnblogs.com/zhncnblogs/p/17581967.html

相关文章

  • java笔记_11_JVM调优参数(转载)
    -Xms2048m//设置jvm的初始内存。这个值最好设置的跟-Xmx相同,以避免每次垃圾回收完成后JVM都要重新分配内存-Xmx2048m//JVM最大可用内存-XX:PermSize=256M//设置持久代大小-XX:MaxPermSize=512M//设置最大持久代大小-XX:+PrintGCDetails-XX:+PrintGCDat......
  • java后台接收ajax发送的参数
    1、前台发送数据到服务端,以及接受后台数据前台发送数据到服务端,有两种方法:(1)使用表单发送同步请求      参数inputStr:   参数intputInt:(2)使用ajax发送异步请求,发送的数据为json对象      参数username:      参数password:<scriptt......
  • Java的File类解析
    File类File类注:Windows的路径分隔符使用反斜线“\”,而Java程序中的反斜线表示转义字符,所以如果需要在Windows的路径下包括反斜线,则应该使用两条反斜线或直接使用斜线“/”也可以。Java程序支持将斜线当成平台无关的路径分隔符。1.描述java.io.File类∶代表文件和目录。在......
  • Java解决高并发秒杀商品
    在看本文章之前,需要了解Springboot搭建和使用,本篇文章核心问题是如何解决高并发问题。开发环境:redis缓存4.0.1,Rabbitmq消息队列,Erlang(这个跟MQ环境有关,先安装Erlang,再安装MQ),mysql5.7,JDK1.8(Springboot要用1.8以上的版本)开发框架:Springboot2.0.4,mybatis,前端页面:thym......
  • Java面试题 P5:简述final作用
    1、简述final作用?final含义是最终的。(1)修饰类:表示类不可被继承,不可以有子类;(2)修饰方法:表示方法不可以被子类覆盖,但是可以重载;(3)修饰变量:表示变量一旦被赋值就不可以更改它的值。(4)修饰成员变量如果final修饰的是类变量,只能在静态初始化块中指定初始值或者声明该类变量时指定初......
  • 《安富莱嵌入式周报》第318期:无线电扫描仪,高精度功耗分析仪,单片机JavaScript引擎,平头
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 【实战技能视频】基于硬件垂直消隐的多缓冲技术在LVGL,emWin,GUIX和TouchGFX应用https://www.armbbs.cn/forum.php?mod=viewthread&tid=120114视频版:https://www.bilibili.......
  • Java程序员进阶之路----四阶段
    第一阶段:JavaSE全面深入的学系JavaSE课程,主要内容包括Java概述与环境搭建、基本语法、面向对象基础、接口、抽象类、常用类(Object/内部类/包装类/String等)、集合、算法和数据结构、异常、多线程、I/O框架、网络编程、JDK8新特性、JVM内存模型、反射、注解xml等。本阶段学......
  • 学习Java第5天
    Java程序运行机制1.编译型(complie)操作要求不高(c....c++)2.解释性速度要求不高,(网页-脚本)3.程序运行机制psvm生成门方法sout生成输出语句IDEA的使用 ......
  • 面试类-Java并发编程 (一)
    1.并行跟并发有什么区别?从操作系统的角度来看,线程是CPU分配的最小单位。并行就是同一时刻,两个线程都在执行。这就要求有两个CPU去分别执行两个线程。并发就是同一时刻,只有一个执行,但是一个时间段内,两个线程都执行了。并发的实现依赖于CPU切换线程,因为切换的时间特别短,所以基本......
  • [爬虫]2.2.2 使用PhantomJS处理JavaScript
    PhantomJS是一个无头(headless)浏览器,它可以解析和执行JavaScript,非常适合用于爬取动态网页。"无头"意味着它可以在没有用户界面的情况下运行,这对于服务器环境和自动化任务非常有用。安装PhantomJS首先,你需要下载并安装PhantomJS。你可以从官方网站下载↗适合你的操作系统的版本......