java.lang.RuntimeException: Parcelable encountered IOException writing serializable object
这里有二个关键字,存储和传输,存储的场景比如对象的持久化,传输的场景比如将对象通过网络传输,然后在需要使用的时候,反序列化,重新创建对象。
Java将数据从源(文件、内存、键盘、网络)读入到内存 中,形成了流,然后将这些流还可以写到另外的目的地(文件、内存、控制台、网络),之所以称为流,是因为这个数据序列在不同时刻所操作的是源的不同部分。按照不同的分类标准,IO流分为不同类型。主要有以下几种方式:按照数据流方向、数据处理的单位和功能。
由于存在于内存中的对象都是暂时的,无法长期驻存,为了把对象的状态保持下来,这时需要把对象写入到磁盘或者其他介质中,这个过程就叫做序列化。
Cloneable接口与Serializable接口都是定义接口而没有任何的方法。Cloneable可以实现对象的克隆复制,Serializable主要是对象序列化的接口定义。很多时候我们涉及到对象的复制,我们不可能都去使用setter去实现,这样编写代码的效率太低。JDK提供的Cloneable接口正是为了解决对象复制的问题而存在。Cloneable结合Serializable接口可以实现JVM对象的深度复制。
公园里,一位仙风鹤骨的老者在打太极,一招一式都仙气十足,一个年轻人走过去:“大爷,太极这玩意儿花拳绣腿,你练它干啥?”老者淡淡一笑:“年轻人,你还没有领悟到太极的真谛,这样,你用最大力气打我试试。”于是年轻人用力打了老头一拳,被讹了八万六。
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列。该系列引用了《Android开发艺术探索》以及《深入理解Android 卷Ⅰ,Ⅱ,Ⅲ》中的相关知识,另外也借鉴了其他的优质博客,在此向各位大神表示感谢,膜拜!!!另外,本系列文章知识可能需要有一定Android开发基础和项目经验的同学才能更好理解,也就是说该系列文章面向的是Android中高级开发工程师。
Intent数据传递 List 传递List传递List的方法 ArrayList<String> info = new ArrayList<String>(); info.add(name); info.add(website); info.add(weibo); Intent intent = new Intent(MainActivity.this, ResultActivity.class); intent.putStringArrayListExtra("infoList"
我在使用 withObject 传自定义对象的时候,发现一个BUG,在传值的时候,会走SerializationService的object2Json方法,但是在获取值的时候,竟然不调用parseObject这个方法来转回对象。
Interface for classes whose instances can be written to and restored from a Parcel。 Classes implementing the Parcelable interface must also have a static field called CREATOR, which is an object implementing the Parcelable.Creator interface。
说到对象,是一个比较宽泛的概念,简单的说,他就是类的一个实例,有状态和行为,存活在内存中,一旦JVM停止运行,对象的状态也会丢失。
通过实现java.io.Serializable interface接口来序列化一个类。
可以以直接通过调用Intent的putExtra()方法存入数据,然后在获得Intent后调用getXxxExtra获得 对应类型的数据;传递多个的话,可以使用Bundle对象作为容器,通过调用Bundle的putXxx先将数据 存储到Bundle中,然后调用Intent的putExtras()方法将Bundle存入Intent中,然后获得Intent以后, 调用getExtras()获得Bundle容器,然后调用其getXXX获取对应的数据。
这里强烈建议把前面两篇文章看一遍,因为前面两篇文章对后面大家对android的IPC的理解帮助很大,本片文章主要内容如下
在Java中,序列化是将对象的状态写入字节流的机制。它主要用于Hibernate、RMI、JPA、EJB和JMS技术中。
Java中的序列化方法 : 在Java中序列化有两种方法, 一种是实现Serializable接口, 一种是实现Parcelable接口, Serializable接口是J2SE固有支持的, Parcelable是Android支持的, 是Android中特有的, 效率比Serializable高;
在Activity间传递的数据一般比较简单,但是有时候实际开发中也会传一些比较复杂的数据,本节一起来学习更多Activity间数据的传递方法。
本文实例讲述了Android编程实现全局获取Context及使用Intent传递对象的方法。分享给大家供大家参考,具体如下:
点击上面蓝色字体关注“IT大飞说” 置顶公众号(**ID:ITBigFly**)第一时间收到推送
这篇博客是在Eugenio @workingkills Marletti的帮助下完成的。
Parcel作为Android Binder通信的基础,从源码的角度,了解下parcel的特性,还是很有必要的。
浅克隆:克隆对象中的变量与之前对象的值相同,并且对象中的引用类型变量仍然指向原来对象引用类型变量的地址.
在Android开发中,Serializable与Parcelable是两种用于实现对象序列化的常见方式。在面试中,对于这两种技术的理解和应用能力常常被用来评估一个Android开发者的水平。本文将围绕Serializable与Parcelable展开一系列高级疑难的面试问题,并深入探讨它们的原理、优劣势以及实际应用中的技巧。
由于 Java 的 Serializable 的性能较低,Parcelable 正式在这个背景下产生的,它核心作用就是为了解决 Android 中大量跨进程通信的性能问题。
Interface for classes whose instances can be written to and restored from a Parcel.
我们知道Java对象的生存周期跟GC有关,更宽泛一点讲,JVM关闭了,对象自然也就被销毁了。但是有的时候,我们需要将某些对象保存起来,或者进行传输,以便以后JVM启动的时候,又可以重新获取到对象。这个技术就是对象持久化技术。 Java中的Serialization可以将一个对象转成字节流,我们可以将这个字节流通过网络传输到其他地方,或者保存到文件中,或者存到数据库中。这样就相当于将对象保存下来了。 Java中的Deserialization 就是序列化的反过程,从将字节流中的内容转化成java对象。
概述 序列化:将一个对象转换成 可存储或 可传输的状态。 Parcelable和Serializable的区别 作用 Serializable的作用是为了保存对象的属性到本地文件、数据库、网络流、rmi以方便数据传输,当然这种传输可以是程序内的也可以是两个程序间的。 Parcelable的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间以及不同Android程序间(AIDL)高效的传输数据而设计,这些数据仅在内存中存在,Parcelable是通过IBinder通信的消息的载体。 性能比
自己开发Android也有些时间了,Serializable和Parcelable遇到过不止一次了。但是每次别人问起具体的内容自己偏偏记得不是很清晰。因为某些原因再次梳理一下,以文章的形式给自己存储下来。温故而知新!!
推荐几个非常有用的开发工具 非著名程序员 我们都知道Eclipse开发Android将在今年年底google不再继续提供相应的开发支持,转而开始强烈发展Android Studio,现在我就分享几款能帮助团队提升工作效率的几个Android Studio插件和工具。 1、SelectorChapek SelectorChapek是一款帮助我们快速完成Selector的AndroidStudio插件。安装方法如下: ①、选择Preferences→Plugins→Browse repositories搜索Se
3、Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable在外界有变化的情况下不能很好的保证数据的持续性。尽管Serializable效率低点,但此时还是建议使用Serializable。存储到设备或者网络传输上选择Serializable。
进程间通信 即 IPC机制,IPC 全称为 Inter-Process Communication。
(3)在安卓中使用 Intent 进行传输时候,数据类型较为复杂的需要进行序列化操作 。
Java 序列化机制是一种将对象转换为字节流的过程,以便在网络上传输或保存到文件中,并能在需要时将字节流还原为对象。这一机制通过实现 java.io.Serializable 接口来实现,同时涉及到一些关键概念和注意事项。
程序中存储和传递信息,需要有个合适的数据结构,最简单的是定义几个变量,变量多了之后再分门别类,便成了聚合若干变量的对象。代码在函数调用时可以直接传递对象,但更多的场合例如与文件交互、与网络交互、组件之间交互等等,就无法直接使用未经处理的对象。因此Java引入了序列化的概念,用于把一个对象转换为字节序列,然后再对这个字节序列做存储和传递操作。与之对应的是反序列化,反序列化是把一个字节序列恢复为Java对象的过程,而序列化是把Java对象转化为字节序列的过程。
这一章主要讲述多进程的作用,序列化和反序列化,Serializable和Parcelable
关于AndroidStudio混淆打包 proguard-rules.pro 的配置 最近在搭建一个APP的时候,使用了混淆打包的方式,然后发现死活打包不上。后来求爷爷告奶奶才搞正常了,这里记录一下,其实关键点就是在这个 proguard-rules.pro 文件里面 ,一下是我自己的配置,大家看着,就知道怎么配置了。 # Add project specific ProGuard rules here. # By default, the flags in this file are appende
前言 昨天知道得力集团在某一个培训机构进行校园招聘。于是我今天就来了,听了一下宣讲内容。发现得力集团刚8月份在武汉成立了研究院,主要是做云服务,从0开始,现在的团队规模大概在20多人。一开始宣讲的是
RMI(Remote Method Invocation,远程方法调用)是从java1.1开始实现的,它大大增强了Java开发分布式应用的能力。RMI对接口有着强烈的依赖,在需要创建一个远程对象的时候,我们通过传递一个接口来隐藏基层的实施细节,所以客户得到远程对象的一个句柄时,它们真正得到的是接口句柄,然后本地代码通过接口操作远程对象。通过RMI编写程序可以非常方便的实现分布式Java应用程序。
单例保证一个对象JVM中只能有一个实例 这里提供一个双重锁校验单例,并且引出了序列化破坏的问题,本篇来说一下这个原理和解决 首先把上一篇的单例代码拿过来贴上:
Channel channel.exchangeDeclare(): type:有direct、fanout、topic三种 durable:true、false true:服务器重启会保留下来Exchange。警告:仅设置此选项,不代表消息持久化。 即不保证重启后消息还在。原文:true if we are declaring a durable exchange (the exchange will survive a server restart) autoDelete:true、false.tru
Android开发中经常需要用到序列化,系统提供了两个接口用来实现, · Parcelable · Serializable
前言:Activity就是Android世界的controller,它们构成了Android App里面的每一个页面,当然我们还会使用Fragment来将页面进一步划分,通过Fragment可以对特定业务模块的View+逻辑封装,让其与Activity解耦,同时还可以有自己的生命周期,让我们控制布局绘制和进行资源回收,这些都是Fragment的好处,以后有机会再谈,今天,我们想讨论的是Activity页面之间跳转时,互相传值的方法选择。
开发中,序列化是常见操作,在java中,我们一般会用到Serializable或者Parcelable,优缺点就不赘述了,今天来看看kotlin中的序列化。
在Android 程序之中,Activity 对象时和用户交互的唯一手段,几乎每个 Android 项目程序都有多个 Activity。因此,灵活的在屏幕上切换 Activity 尤为重要。下面让我们一起来看一下如何用 Intent 来启动 Activity 对象吧
对sighed APK进行代码混淆和精简,从而使得发布的代码可以防止被别人反编译解析。
本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8479282.html
领取专属 10元无门槛券
手把手带您无忧上云