Java:intent传递对象——序列化

Android中Activity跳转 Bunder通过Serializable方式携带对象 Bunder可以携带序列化的对象,但这个类在定义时要继承序列化接口Serializable 继承了序列化接口的对象Music import java.io.Serializable; //一定要继承Serializable public class Music implements Serializable { private String title; private Stri... 阅读详情

昨天有人问我intent怎么传对象,我直接就回了句Extra,data,他说这都是键值对和数据,我当时就愣住了,回来网上一查才发现确实有传递对象的,包括打包传递和序列化传递,可惜之前没怎么用到过传递对象,一般都是获取关键值传递过去直接查询获得对象的。

先介绍对象序列化:
对象序列化(Serializable)是指将对象转换为字节序列的过程,而反序列化则是根据字节序列恢复对象的过程。

序列化一般用于以下场景:

1.永久性保存对象,保存对象的字节序列到本地文件中;

2.通过序列化对象在网络中传递对象;

3.通过序列化在进程间传递对象。

对象所属的类必须实现Serializable或是Externalizable接口才能被序列化。对实现了Serializable接口的类,其序列化与反序列化采用默认的序列化方式,Externalizable接口是继承了Serializable接口的接口,是对Serializable的扩展,实现了Externalizable接口的类完全自己控制序列化与反序列化行为。

Java.io.ObjectOutputStream代表对象输出流,其方法writeObject(Object obj)可以实现对象的序列化,将得到的字节序列写到目标输出流中。Java.io.ObjectInputStream代表对象输入流,其readObject()方法能从源输入流中读取字节序列,将其反序列化为对象,并将其返回。

如果采用默认的序列化方式,只要让一个类实现Serializable接口,其实例就可以被序列化。通常,专门为继承而设计的类应该尽量不要实现Serializable接口,因为一旦父类实现了Serializable接口,其所有子类也都是可序列化的了。

默认的序列化方式的不足之处:

1.直接对对象的不宜对外公开的敏感数据进行序列化,这是不安全的;

2.不会检查对象的成员变量是否符合正确的约束条件,有可能被传改数据而导致运行异常;

3.需要对对象图做递归遍历,如果对象图很复杂,会消耗很多资源,设置引起Java虚拟机的堆栈溢出;

4.使类的接口被类的内部实现约束,制约类的升级与维护。

通过实现Serializable接口的private类型的writeObject()和readObject(),或是实现Externalizable接口,并实现writeExternal()与readExternal()方法,并提供public类型的无参数构造函数两种方式来控制序列化过程可以有效规避默认序列化方式的不足之处。

intent传递序列化的对象的方法:Bundle.putSerializable(Key,Object);
首先,我们定义一个实现Serializable接口对象类
public class Object implements Serializable{
serialVersionUID=;
·······set,get方法
}

然后传出
Object mObject = new Object();

mObject.setName("fire");

mObject.setDay(25);

Intent mIntent = new Intent(this,ObjectTranDemo1.class);

Bundle mBundle = new Bundle();

mBundle.putSerializable(SER_KEY,mObject);

mIntent.putExtras(mBundle);

1
    startActivity(mIntent);  

接收端:
Object mObject = (Object)getIntent().getSerializableExtra(ObjectTranDemo.SER_KEY);

string name= mobject.getname();
int day= mObject.day();

Intent传递对象的两种方法 Android为intent提供了两种传递对象参数类型的方法 分别需要使实体类实现Serializable接口、Parcelable接口 首先我们要知道,传递对象,需要先将对象序列化 一、那么为什么要对象序列化 1、永久性保存对象,保存对象的字节序列到本地文件中; 2、用过序列化对象在网络中、进程间传递对象; 二、序列化对象什么时候实现Serializable接口,什么... 阅读详情

相关推荐

STM32F4使用CUBEMX ADC定时采样+DMA

STM32、FFT、ADC、TIM

m0_62379750的博客 4222

Intent传递对象时为什么要序列化

大家都知道进行Android开发的时候,无法将对象的引用传给Activities或者Fragments,我们需要将这些对象放到一个Intent或者Bundle里面,然后再传递。至于怎么实现序列化,反序列化相信网上的帖子一大堆了就不一一阐述了 什么是序列化 —— 序列化,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。 那么为什么要序列化?

jiuchen4107的博客 7095

python爬虫入门教程(非常详细)

爬虫指的是一种自动化程序,能够模拟人类在互联网上的浏览行为,自动从互联网上抓取、预处理并保存所需要的信息。爬虫运行的过程一般是先制定规则(如指定要抓取的网址、要抓取的信息的类型等),紧接着获取该网址的HTML源代码,根据规则对源代码进行解析和抽取,最后进行处理和保存。爬虫在实际应用中广泛使用,如搜索引擎、大数据分析、交易数据采集等领域,都需要用到爬虫技术来实现信息的定向采集和处理。

工宗浩生财指南针 2万+

关于Intent传递对象以及序列化技巧

为什么要序列化?序列化的原因基本三种情况: 1.永久性保存对象,保存对象的字节序列到本地文件中; 2.对象在网络中传递; 3.对象在IPC间传递。序列化方法在Android系统中关于序列化的方法一般有两种,分别是实现Serializable接口和Parcelable接口,其中Serializable接口是来自Java中的序列化接口,而Parcelable是Android自带的序列化接口。上述的

wqewq19的博客 758

服务器测试之网卡性能调优

nvidia下载mlnx_ofed:https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/intel下载驱动固件:https://www.intel.com/content/www/us/en/download-center/home.html。然而,你可以根据实际情况手动调整中断相关配置。老生常谈了,一些性能相关的设置项打开,节能的关闭,虚拟化相关的VMX/SR-IOV/IOMMU最好也都关掉。

qq_41897488的博客 4908

用Python爬取公众号历史所有文章,看这篇就够了

手把手教你爬取公众号历史所有文章

u010522887的专栏 1万+

Intent传递序列化数据

Serializable序列化数据 这是一种比较简单的序列化,只需要将要序列化的类实现Serializable接口,不用再执行其他操作,在Intent中放入序列化数据即可 序列化数据 public class Student implements Serializable{ private String name; private String age; private St

Hate Bugs 1465

FFmpeg入门详解之110:RTSP协议讲解

TCP/IP 协议体系中的一个应用层协议,该协议定义了一对多应用程序如何有效地通过 IP 网络传送多媒体数据。RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输。HTTP与RTSP相比,HTTP传送HTML,而RTSP传送的是多媒体数据。正在上传…重新上传取消RTSP是基于文本的协议,采用ISO10646字符集,使用UTF-8编码方案。行以CRLF中断(\r\n:10,13:0x0A,0x0D),包括消息类型、消息头、消息体和消息长。

福优学苑@音视频+流媒体 2529

Intent序列化传递对象

一、Serializable的序列化 package com.example.lfk.activitytest.entity; import java.io.Serializable; /* * Created by 98620 on 2017/10/27. */ public class Person implements Serializable { private Str

上下求索 482

27、自闭症儿童治疗与玩具设计研究

本研究探讨了自闭症儿童的治疗方法与玩具设计之间的关联,分析了游戏疗法、音乐疗法和职业疗法等在治疗中的应用,并介绍了多种针对自闭症儿童的治疗玩具案例。通过用户研究和多学科合作,提出了以Pro-Ability为核心的设计理念,开发了结合音乐疗法和精细运动训练的智能玩具套件。研究总结了当前成果与局限性,并展望了未来发展方向,旨在为自闭症儿童提供更有效的康复支持。

keras9composer的博客 211

基于Simulink的光储系统黑启动能力仿真

本文基于Simulink平台构建了光储系统黑启动仿真模型,详细阐述了储能VF控制、光伏孤岛MPPT和同步并网等核心控制策略。通过分阶段协调控制(储能启动→关键负载→光伏接入→非关键负载→同步并网),实现了60秒内恢复供电、母线电压波动<5%的性能指标。仿真结果表明,协调控制策略相比无序启动可显著提升系统稳定性,避免电压崩溃和负载跳闸。文章还提供了完整的建模步骤、核心代码及进阶优化方向,为微电网应急供电设计提供了实用参考。该模型适用于光伏储能系统的黑启动能力验证和优化研究。

amy_mhd的博客 106

Intent(意图)和序列化和反序列化

Serializable方式 Serializable是Java 提供的一个序列化接口,它是一个空接口,为对象提供标准的序列化和反序列化操作,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。至于序列化的方法也很简单,只需要让一个类去实现Serializable这个接口就可以了。 比如说有一个Person类,其中包含了name和age这两个字...

BIG_BEARC的博客 974

BlockUI专栏目录

BlockUI是一个设计NX对话框的工具,是官方推荐使用的对话框制作方法,能够与NX自身风格相统一,并且在实际开发中经常被使用。BlockUI可以帮助用户快速创建NX对话框,支持多种控件类型,如按钮、文本框、标签等。通过使用BlockUI,用户可以轻松地自定义对话框的布局、样式和交互行为。此外,BlockUI还提供了一些高级功能,如动态更新、条件显示和事件处理等,以帮助用户创建更加复杂和灵活的对话框。本专栏讲述了使用BlockUI制作NX对话框的方法,介绍了每个控件的功能,并且分享一些常用操作的源码。

王牌飞行员_里海的博客 1634

Android中Intent传递Java对象的方法

Android中Intent传递Java对象的方法

gaohuanjie的专栏 2145

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

activity之间传递list序列化问题

问题:     我通过Intent将A activity 中的数据传递给B activity,之后B也通过Intent返回一个数据给A,数据是一个自定义的类,这个类中有一个成员是List集合,list集合中有一个map集合, 自定义实现了类序列化public class TableSeatNum implements Serializable,list集合也是用的ArrayList,但是map集...

博客 554

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

通过Intent传递对象

Serializable序列化 只需要继承Seriablizable这个接口即可 person.java 自定义的对象,用来被intent传输 public class person implements Serializable { private String name; public String getName() { ...

github_38641765的博客 668

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Intent之复杂数据的传递

1.Intent传递简单数据 2.Intent传递数组 写入数组:bd.putStringArray("StringArray", new String[]{"呵呵","哈哈"});//可把StringArray换成其他数据类型,比如int,float等等…读取数组:String[] str = bd.getStringArray("StringArray")3.Intent传递集合嗯,数组很简

a_sid的博客 432

Intent之对象传递(Serializable传递对象和对象集合)

Android中Intent传递类对象提供了两种方式一种是 通过实现Serializable接口传递对象,一种是通过实现Parcelable接口传递对象。 要求被传递的对象必须实现上述2种接口中的一种才能通过Intent直接传递。 Intent中传递这2种对象的方法: Bundle.putSerializable(Key,Object); //实现Serializable接口的对象

张亚运的专栏 1万+

使用Bundle 或者Intent传递自定义对象(序列化传递)

使用Bundle 或者Intent传递自定义对象,需要把自定义对象序列化。 序列化表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上传输,也可以存储到本地。序列化的方法有两种:Serializable方式和Parcelable方式。 1.Serializable方式 Serializable即序列化的意思,如果有个自定义类是Person.java,里面有name和age两个字...

skyang在路上 2573

【Android】使用 Intent 传递对象的两种序列化方式

简单介绍 Android 中通过Intent传递自定义对象的两种方式:Serializable和Parcelable。

LiuYaoheng的博客 873

Android 通过 Intent 传递实体类对象

0、相关文章 Android 通过 Intent 传递类对象 1、正文 Android中Intent传递类对象提供了两种方式一种是通过实现Serializable接口传递对象,一种是通过实现Parcelable接口传递对象。 要求被传递的对象必须实现上述2种接口中的一种才能通过Intent直接传递。 Intent中传递这2种对象的方法: Bundle.putSerializable...

songzi1228的博客 3905

Intent传递对象的几种方式

Intent的用法相信你已经比较熟悉了,Intent可以用来启动Activity,Service等等,同时我们也可以通过Intent来进行传值,比如以下代码 Intent intent=new Intent(MainActivity.this,OtherActivity.class); intent.putExtra("name

李济洲的博客 2万+

Android中Intent传递类对象的方法一(Serializable)

Activity之间通过Intent传递值,支持基本数据类型和String对象及它们的数组对象byte、byte[]、char、char[]、boolean、boolean[]、short、short[]、int、int[]、long、long[]、float、float[]、double、double[]、String、String[],还有实现了Serializable、Parcelable接口

Angelica 4033

Intent之对象传递(Parcelable传递对象和对象集合)

接着上一篇文章,下面我们讨论一下如何利用Parcelable实现Intent之间对象的传递 一、实现对象传递 首先创建User.java实现Parcelable接口: package org.yayun.demo; import java.io.Serializable; import android.R.integer; import android.os.Parcel;

张亚运的专栏 9400

Android 如何使用Intent传递对象

之前的文章中,介绍过Intent

残缺的孤独 1110
上一篇: Java:HttpURLConnection学习
下一篇: Struts2:常用标签总结
hoyan_li
博客等级 码龄14年 5粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值