有序化(Serializable)的讲解

android 如何分析应用的内存(十六)——使用AS查看Android堆 在前面,先介绍了如何使用jdb和VS code查看应用栈相关内容。本文将介绍,如何查看堆中的内容。 阅读详情

1、序列化是干什么的?

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

2、什么情况下需要序列化

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

3、当对一个对象实现序列化时,究竟发生了什么?

在没有序列化前,每个保存在堆(Heap)中的对象都有相应的状态(state),即实例变量(instance ariable)比如:

java 代码

Foo  myFoo = new Foo();  
myFoo .setWidth(37);  
myFoo.setHeight(70);  

当通过下面的代码序列化之后,MyFoo对象中的width和Height实例变量的值(37,70)都被保存到foo.ser文件中,这样以后又可以把它 从文件中读出来,重新在堆中创建原来的对象。当然保存时候不仅仅是保存对象的实例变量的值,JVM还要保存一些小量信息,比如类的类型等以便恢复原来的对 象。
java 代码

FileOutputStream fs = new FileOutputStream("foo.ser");  
ObjectOutputStream os = new ObjectOutputStream(fs);  
os.writeObject(myFoo);  

4、实现序列化(保存到一个文件)的步骤

a)Make a FileOutputStream
java 代码

FileOutputStream fs = new FileOutputStream("foo.ser");    

b)Make a ObjectOutputStream
java 代码

ObjectOutputStream os =  new ObjectOutputStream(fs);   

c)write the object
java 代码

os.writeObject(myObject1);  
os.writeObject(myObject2);  
os.writeObject(myObject3);  

d) close the ObjectOutputStream
java 代码

os.close();  

5、举例说明
java 代码

import java.io.*;

public class  Box implements Serializable  
{  
    private int width;  
    private int height;  

    public void setWidth(int width){  
        this.width  = width;  
    }  
    public void setHeight(int height){  
        this.height = height;  
    }  

    public static void main(String[] args){  
        Box myBox = new Box();  
        myBox.setWidth(50);  
        myBox.setHeight(30);  

        try{  
            FileOutputStream fs = new FileOutputStream("foo.ser");  
            ObjectOutputStream os =  new ObjectOutputStream(fs);  
            os.writeObject(myBox);  
            os.close();  
        }catch(Exception ex){  
            ex.printStackTrace();  
        }  
    }  

}  

6、相关注意事项

a)序列化时,只对对象的状态进行保存,而不管对象的方法;
b)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;
c)当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;
d)并非所有的对象都可以序列化,,至于为什么不可以,有很多原因了,比如:

  1. 安全方面的原因,比如一个对象拥有private,public等field,对于一个要传输的对象,比如写到文件,或者进行rmi传输 等等,在序列化进行传输的过程中,这个对象的private等域是不受保护的。
  2. 资源分配方面的原因,比如socket,thread类,如果可以序列化,进行传输或者保存,也无法对他们进行重新的资源分 配,而且,也是没有必要这样实现。
基于 ESP32 的智慧图书馆图书定位与借阅管理系统 本文设计的基于 ESP32 的智慧图书馆图书定位与借阅管理系统,以低成本、模块化、易部署为核心优势,融合 UWB 精准定位、RFID 自动识别、WiFi 无线通信技术,解决了传统图书馆的痛点问题。 阅读详情

相关推荐

QMT与聚宽策略代码对接实战:Redis信号传递与xtquant交易实现

本文详细介绍了如何将聚宽策略代码与本地QMT终端进行高效对接的实战方案。通过利用Redis Stream构建可靠信号通道,解决了云端信号到本地执行的延迟与丢失问题,并结合xtquant库实现自动化交易执行。文章重点阐述了信号封装、资金映射、异步下单、风控检查及独立资金管理等核心环节,为量化交易者搭建自主可控的实盘系统提供了完整路径。

lilh34434的博客 473

冲突等价(ConflictEquivalence) 可串行化调度(Serializable Schedules)

事务 事务(transaction)是在数据库上执行的一个或多个操作构成的序列,用来完成数据库系统的高级功能。 SQL事务语句 事务启动(start):BEGIN; 事务提交(commit):COMMIT; 将事务对数据库的修改持久地写到数据库中 事务中止(abort):ROLLBACK; 将事务对数据库的修改全部撤销(undo),就像事务从未执行过 事务可以中止自己,也可以被DBMS中止 事务的ACID性质(TheACIDPropertie...

软件工程小施同学 的专栏 1万+

节卡Jaka Zu APP编程避坑指南:从频繁通讯错误到稳定Socket交互的调试心得

本文详细解析了节卡Jaka Zu APP编程中常见的通讯错误问题,并提供了从基础排查到高级调试的完整解决方案。通过优化网络配置、固件匹配、心跳机制和数据交互规范,开发者可实现稳定的Socket通讯,有效提升工业机器人操控的可靠性。文章特别针对v1.6.7.3版本的典型问题给出了实用调试技巧。

weixin_42639633的博客 321

Serializable编写一个result类把数据返回

序列化:就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。我们将对象写入到本地文件的时候 报错: java.io.NotSerializableException:com.aaa.day06.test.People。反序列化: 将 二进制数据流 转换成 java对象信息的过程。序列化: 将 java对象信息 转换成 二进制数据流的过程。把数据打包为二进制流数据。

qq_46654604的博客 818

H3C无线控制器AC与第三方认证系统集成实现企业级Portal短信认证方案

本文详细阐述了如何将H3C无线控制器(AC)与第三方认证系统集成,构建企业级Portal短信认证方案。该方案通过手机号作为临时凭证,实现了访客网络的实名追溯、权限控制与专业体验。文章深入解析了方案原理、H3C AC的关键配置步骤、第三方系统对接要点及短信网关选型避坑指南,为企业提升网络安全管理与访客服务质量提供了完整、可行的实战指导。

a3b4c5的博客 194

华硕ROG幻16笔记本电脑模式切换管理工具完美替代华硕奥创中心管理工具

参考文档1这个工具可以完美替代华硕奥创中心工具,可以定制化不同模式下的CPU、GPU、风扇转速、电池计划等。是由华硕开发人员开发的一个纯绿色的系统管理工具。直接展示启动后的工具界面效果图:这个工具也可以一键式停止正在运行的华硕ASUS服务,减少不必要的资源消耗。

追梦&天空的博客 1万+

数据库 串行化 时间戳笔记

Serial schedule(串行化调度): 简答来说就如下图 equivalent schedule: 执行T1的结果和执行T2的结果一样 serializable schedule(可串行化调度): 结果与serial schedule 的结果一样 如下图d 冲突可串行化(conflict serializable schedule) Conflict equival...

YzarrK的博客 2143

Android 序列化之Serializable和Parcelable,一文说清

而Android的Parcelable的设计初衷是由于Serializable效率过低,消耗大,而android中数据传递主要是在内存环境中(内存属于android中的稀有资源),因此Parcelable的出现为了满足数据在内存中低开销而且高效地传递问题。用Parcelable也可以实现Serializable相同的效果,不过不同于将对象进行序列化,Parcelable方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都是Intent所支持的数据类型,这样也就实现传递对象的功能了。

2401_83620690的博客 1578

制造业信息化的现实困局与未来展望:从基础到数字化的挑战与机遇

随着全球科技的发展和市场竞争的加剧,制造业的转型升级成为企业必须面临的挑战。在信息化和数字化的浪潮下,许多企业试图通过技术创新来提升自身竞争力。然而,现实情况是,绝大部分制造业企业的基本信息化都尚未完成,更遑论复杂的数字化。那么,制造业在信息化进程中面对哪些阻碍?未来又该如何实现从基础信息化到数字化的转型?

Yz2024的博客 2983

理想L9高通QAM8797座舱域控制器全拆解|全网独家复现 硬件架构升级、电源散热优化、多屏低延迟交互、车机系统赋能高端智能座舱落地

随着智能汽车向舱驾一体、全域智能化、多模交互方向迭代,传统单一功能座舱芯片已无法满足多屏高刷渲染、全车AI语音、车内视觉感知、高速车载通信的叠加算力需求。2026款全新理想L9作为旗舰级智能SUV,全面搭载高通新一代旗舰座舱域控制器QAM8797,搭配自研马赫M100 AI芯片、国产车规主控芯片,构建起高性能、高可靠、低延迟的车载中央计算平台。

getusushu的博客 377

Jackson JSON序列化保持列表List 有序

JSON本身是无序的,保持有序就需要把list 按照顺序 改为Map<Integer,Object> 使用jackson的转换器功能 @SuppressWarnings("rawtypes") public class OrderedListJsonConverter extends StdConverter<List, Map<Integer, Object>> { @Override public Map<Integer, Object>

muyuanjin67的博客 2219

IDM 的免费替代品来了!这款开源下载器速度提升500%

💡分享一款开源的下载管理工具,支持多线程加速(最高提升500%)、队列管理、计划任务和浏览器集成,界面现代化且支持深色模式,跨平台支持Windows/Linux,是IDM的优秀替代方案🎈

XiaoqiangClub的博客 727

Java 处理流--对象流(ObjectInputStream和ObjectOutStream)

对象流——归并对象处理流 反序列化 输入流:ObjectInputStream()、readObject(() 序列化 输出流:ObjectOutputStream 、writeObject() 要点: 1.先序列化后反序列化;读取顺序必须与写出一致。 2.不是所有的对象都可以序列化, 必须具有java.io.Serializable接口;不是所有的属性都需要序列化,用transient修饰的属性不会被序列化。 3.反序列化,即读取时需判断对象类型。 ...

qq_57389269的博客 454

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

PriorityBlockingQueue 原理分析

PriorityBlockingQueue是一个支持优先级的无界阻塞队列,直到系统资源耗尽。默认情况下元素采用自然顺序升序排列。也可以自定义类实现compareTo()方法来指定元素排序规则,或者初始化PriorityBlockingQueue时,指定构造参数Comparator来对元素进行排序。但需要注意的是不能保证同优先级元素的顺序。PriorityBlockingQueue也是基于...

weixin_30588675的博客 272

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

事物特性和隔离级别

1.原子性,一个事物是执行的最小单元,不能分开。要么全部失败要么成功 2.隔离性,在多线程情况下,在不同线程中保证互不干扰的隔离级别 3持久性 事物提交后对数据库的影响是永久的 5.一致性,数据在提交后,数据库中数据会保持一定逻辑性。 隔离级别有 read uncommitted readcommittee repeatedcommittee serializable 1.脏读 指的是一个事物读取了另一个事物还没提交的数据。可以用 read committe 防止 2.不可重复读,指的是...

writer666的博客 600

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ArrayList是如何实现序列化的

从jdk源码中可以看出 /** * The array buffer into which the elements of the ArrayList are stored. * The capacity of the ArrayList is the length of this array buffer. Any * empty ArrayList with elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA * w

zty 2476

JavaSE基础(137) 对象流

对象流:将对象永久保存到磁盘或者进行网络传输 (注意:前提是对象能够序列化,然后提供一个版本号) ObjectInputStream : 从文件中读取出保存的对象ObjectOutputStream :从内存中、代码中 将对象写入磁盘文件 【能够将对象永久的保存到磁盘文件中】 ex:使用对象流完成对自定义对象的序列化和重构测试 /** * 对象流:将对象永久保存到磁盘或者进...

郑清 1756

java序列化(Serializable)的作用和反序列化

1、序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保 存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。 2、什么情况下需要序列化 a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候; b)当你...

ice.k 169

数据库事务中调度串行化、冲突可串行化、前趋图(优先图)

延续上篇博文一文读懂Spring事务和MySQL事务与锁我们继续学习。 通常数据库事务是并发执行的(如果你的数据库隔离级别非serializable)),但是这里需要注意两点: 必须保证事务并发执行的正确性; 必须用正确的方法调度执行事务的并发操作; 这里就引入了一个概念:调度。 【1】调度 ① 调度定义 多个事务的读写操作按时间排序的执行序列: T1:r1(A)w1(A)r1(B)w1(B)......

小小默:进无止境 5万+

Serializable序列化

1、序列化是干啥用的? 序列化的原本意图是希望对一个Java对象作一下“变换”,变成字节序列,这样一来方便持久化存储到磁盘,避免程序运行结束后对象就从内存里消失,另外变换成字节序列也更便于网络运输和传播,所以概念上很好理解: 序列化:把Java对象转换为字节序列。 反序列化:把字节序列恢复为原先的Java对象。而且序列化机制从某种意义上来说也弥补了平台化的一些差异,毕竟转换后的字节流可以在其他平台上进行反序列化来恢复对象。 2、对象序列化的方式? 在Java中,如果一个对象要想实现序列化,必须要实现下面

nsnsttn的博客 4814

java接口之 Serializable

最近在阅读JDK源码中的集合,看到很多集合类实现了Serializable接口,Cloneable接口。在阅读了很多关于Serializable接口的博客后,浅谈下我对Serializable接口的理解。 序列化 查看 官方文档 就会发现 Serializable接口中一个成员函数或者成员变量也没有。那么这个接口的作用是什么呢。网上找了一些博客看过之后,知道这个接口的作用是实现序列化。 序列化:对象的寿命通常随着生成该对象的程序的终止而终止,有时候需要把在内存中的各种对象的状态(也就是实例变量,不是方法.

鱼的博客 1369

java 的serializable 理解和总结

目录 serializable 理解和总结 序列化是做什么的 什么情况下需要序列化 注意事项 为什么java需要进行序列化 transient关键字 序列化是做什么的    对象的生命周期常随着生成该对象的程序的终止而终止,有时候需要把内存中的各种对象状态 (也就是实例变量,不是方法)保存下来并且可以在需要时再将对象恢复.虽然你可以用你自己的 方法保存对象的状态,但是java提...

yinlell的博客 1万+

Result工具类,作为数据流传输对象

1、Result类作为数据传输对象,这个对象是DTO package com.chaoxing.user.beans.DTO; import com.google.gson.Gson; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; @ApiModel("响应对象") public class Result&lt

weixin_43973940的博客 2963

java 序列化规范_JAVA序列化(Serializable)

网上说“Java 串行化技术可以使你将一个对象的状态写入一个Byte 流里,并且可以从其它地方把该Byte 流里的数据读出来,重新构造一个相同的对象。这种机制允许你将对象通过网络进行传播,并可以随时把对象持久化到数据库、文件等系统里。Java的串行化机制是RMI、EJB等技术的技术基础。用途:利用对象的串行化实现保存应用程序的当前工作状态,下次再启动的时候将自动地恢复到上次执行的状态。序列化就是一...

weixin_30025115的博客 298

java中Serializable接口的理解

最近在阅读JDK源码中的集合,看到很多集合类实现了Serializable接口,Cloneable接口。在阅读了很多关于Serializable接口的博客后,浅谈下我对Serializable接口的理解。 序列化 查看 官方文档 就会发现 Serializable接口中一个成员函数或者成员变量也没有。那么这个接口的作用是什么呢。网上找了一些博客看过之后,知道这个接口的作用是实现序列化。

浪子huang 7263
上一篇: Android开发之SharedPreferences的使用
下一篇: Android Fragment的学习笔记
Kiplening
博客等级 码龄14年 7粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值