问题: 从页面A传递一个Bean对象给页面B,Bean对象里有一个List集合 Bean: public class Bean implements Serializable { private...filterTypeBeans) { this.filterTypeBeans = filterTypeBeans; } } 过程中会报错: java.lang.RuntimeException: Parcelable...encountered IOException writing serializable object 查了很久发现原因,传递的这个List是在数据源中使用subList(0,5)处理过的,而处理时是好的
Serializable和Parcelable, 都可以用来做序列化,网上也有很多文章分析它们的优缺点,大部分的结论都是Serializable使用简单但是低效,Parcelable使用麻烦但是高效,...} } private void writeObject0(Object obj, boolean unshared) throws IOException { /...ioe) { throw new RuntimeException("Parcelable encountered " + "IOException...writing serializable object (name = " + name + ")", ioe); } } 可以看到Intent本身实现了...总结一下: 数据本地持久化,推荐Serializable 界面传值 推荐Parcelable 小彩蛋: 通过上面分析,Parcelable我们可以自由决定哪些字段参与序列化,那么Serializable
out) throws IOException 读取:void readExternal(ObjectInput in)throws IOException,ClassNotFoundException...附录2: Android中实现序列化有两种选择:一是实现Serializable接口,二是实现Parcelable接口(android特有的功能,效率比实现Serializable接口高效,可用于...前面介绍了Serializable接口,实现Serializable接口来实现对象的序列化很简单,但是性能没有Parcelable接口高。所以建议使用Parcelable 。 ...1.什么是Parcelable接口: Parcelable接口定义了将数据写入Parcel和从Parcel读出的接口。...4、Serializable实现与Parcelabel实现的区别: 1)Serializable的实现,只需要implements Serializable 即可。
{ return super.clone(); } Object类里的clone()方法仅仅用于浅拷贝(拷贝基本成员属性,对于引用类型仅返回指向改地址的引用) java.io.Serializable... * * When traversing a graph, an object may be encountered that does not * support the Serializable...to concern * itself with the state belonging to its superclasses or subclasses. * State is saved by writing...to * concern itself with the state belonging to its superclasses or subclasses. * State is saved by writing...classes that need to designate an alternative object to be * used when writing an object to the stream
在安卓开发中,我们在组件中传递数据时常常使用 Intent 传输数据时需要传递 Serializable 或者 Parcelable 的数据,比如 Intent.putExtra 方法: public...Intent putExtra(String name, Parcelable value) {...} public Intent putExtra(String name, Serializable...序列化对象 * * @param obj * @param path * @return */ synchronized public static boolean saveObject(Object...= null) { try { oos.close(); } catch (IOException e) {...new ObjectInputStream(new FileInputStream(path)); return (T) ojs.readObject(); } catch (IOException
中提供了Parcelable接口来实现序列化操作,Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如通过Intent在activity...Parcelable 与 Serializable 区别 (1)两者的实现差异 Serializable的实现,只需要实现Serializable接口即可。...而Android的Parcelable的设计初衷是由于Serializable效率过低,消耗大,而android中数据传递主要是在内存环境中(内存属于android中的稀有资源),因此Parcelable...Parcelable是直接在内存中读写,我们知道内存的读写速度肯定优于硬盘读写速度,所以Parcelable序列化方式性能上要优于Serializable方式很多。...Parcelable也不是不可以在网络中传输,只不过实现和操作过程过于麻烦并且为了防止android版本不同而导致Parcelable可能不同的情况,因此在序列化到存储设备或者网络传输方面还是尽量选择Serializable
(3)实现序列化的必要条件 一个对象要实现序列化操作,该类就必须实现了Serializable接口或者Parcelable接口,其中Serializable接口是在java中的序列化抽象类,而Parcelable...* 这里只序列化name属性 */ private void writeObject(java.io.ObjectOutputStream out) throws IOException...writeReplace序列化时的对象,可以指定其他对象. */ private void readObject(java.io.ObjectInputStream in) throws IOException...* 一般很少重写该方法 */ private Object readResolve() throws ObjectStreamException { System.out.println...Parcelable 与 Serializable 区别 (1)两者的实现差异 Serializable的实现,只需要实现Serializable接口即可。
; } public static void main(String[] args) throws IOException, ClassNotFoundException {...Android中的Parcelable 相对于Serializable而言,Parcelable的使用要复杂一些 public class Book implements Parcelable {...Parcelable在使用上也与Serializable稍有不同 public class TestActivity extends AppCompatActivity { @Override...protocol requires a " + "non-null Parcelable.Creator object called "...至此我们就得到了反序列化的对象 ---- 本篇总结 我们本篇详细分析了Android序列化相关知识,你可以使用Java中的Serializable也可以使用Parcelable。
实现序列化的必要条件 一个对象要实现序列化操作,该类就必须实现了Serializable接口或者Parcelable接口,其中Serializable接口是在java中的序列化抽象类,而Parcelable...接口则是android中特有的序列化接口,在某些情况下,Parcelable接口实现的序列化更为高效,关于它们的实现案例我们后续会分析,这里只要清楚知道实现序列化操作时必须实现Serializable接口或者...和Serializable有什么用,它们有什么差别?...Parcelable和Serializable是两个接口,它们的作用是让实现了其中一个接口的类的对象能够被序列化和反序列化。...Parcelable实现起来比Serializable复杂,但性能较好。使用场景:在内存中实现序列化,例如跨进程传递。
may be encountered that does not support the Serializable interface....object....State is saved by writing the individual fields to the ObjectOutputStream using the writeObject method...总结:readObjectNoData()方法作用域为写入catFamily.txt文件的对象Object的实体类的实现序列化Serializable接口的父类。...3.1 翻译文档 Serializable classes that need to designate an alternative object to be used when writing an
传递Object Serializable方式 传递Object需要先序列化,序列化有两种方式:Serializable和Parcelable。...使用Serializable方式: 用Serializable方式传递Object的语法:bundle.putSerializable(key,object); 用Serializable方式接收...Object的语法:object=(Object) getIntent().getSerializableExtra(key); 例: public class SerInfo implements...方式接收Object SerInfo serInfo = (SerInfo) getIntent().getSerializableExtra("serinfo"); Parcelable方式 用Parcelable...方式传递Object的语法:bundle.putParcelable(key,object); 用Parcelable方式接收Object的语法:object=(Object) getIntent(
an object implementing the Parcelable.Creator interface。...3.实现序列化的方法 Android中实现序列化有两个选择:一是实现Serializable接口(是JavaSE本身就支持的),一是实现Parcelable接口(是android特有功能,效率比实现Serializable...注:Android中Intent传递对象有两种方法:一是Bundle.putSerializable(Key,Object),另一种是Bundle.putParcelable(Key,Object)。...当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口。...4.选择序列化方法的原则 1)在使用内存的时候,Parcelable比Serializable性能高,所以推荐使用Parcelable。
, PARCELABLE, OBJECT;}其实就是个枚举,那么这个值是从哪里传过来的呢?...or SERIALIZABLE or OBJECT....(); } }}原来是在类型判断的时候,如果自定义对象类型是serializable,那么会被当成serializable处理,如果是parcelable那么会被当成parcelable...方式处理,只有在不是 parcelable 也不是 serializable 的时候,才会当成自定义对象处理。...所以只需要将自定义的类,不要去实现 Serializable, Parcelable 接口 这两个接口,那么就可以正常传值。 End OK 本次追踪到此结束,有意思。
所以关于序列化我们就有很多问题了: 在java有Serializable的前提下,Android为什么设计出了Parcelable? Parcelable一定比Serializable快吗?...在java有Serializable的前提下,Android为什么设计出了Parcelable?...一是因为Parcelable在内存传输的效率比Serializable高。二是因为在Android中很多传输数据的方法中,自带了对于Serializable、Parcelable类型的传输方法。...2、 数据持久化(本地存储) 如果只针对Serializable和Parcelable两种序列化方式,需要选择Serializable。...Parcelable一定比Serializable快吗?
零、前言 1.本文的知识点 [1].Intent的简介及[隐式调用]和[显示调用] [2].对象的序列化与反序列化:[Parcelable(简)]和`Serializable] [3]....与Serializable的比较 此小点参考文章,讲得挺好 Parcelable 所属包android.os Serializable 所属包java.io |---所属包说明了Parcelable...的性能要强于Serializable 在读写数据的时候,Parcelable是在内存中直接进行读写 而Serializable是通过使用IO流的形式将数据读写入在硬盘上 Parcelable无法将数据进行持久化...(磁盘存储),Serializable可以 (在不同的Android版本当中,Parcelable可能会不) 五、Intent的数据传递 Intent 除来一大堆对属性的set之外,还有一大堆的putExtra...也有一堆的put,get 其中最重要的是有put序列化对象(Parcelable/Serializable)的方法 A mapping from String keys to various {@
构造函数 重要方法 Method Description 1) public final void writeObject(Object obj) throws IOException {} 它将指定的对象写入...2) public void flush() throws IOException {} 它刷新当前输出流。...构造函数 重要方法 Method Description 1) public final Object readObject() throws IOException, ClassNotFoundException...Student s1 =new Student(211,"ravi"); //Creating stream and writing the object FileOutputStream...Student s1 =new Student(211,"ravi","Engineering",50000); //Creating stream and writing the
> 将list强转成Serializable类型,然后传入(可用Bundle做媒介) 写入集合: putExtras(key, (Serializable)list) 读取集合: (List) getIntent().getSerializable(key) PS:Object类需要实现Serializable接口 ---- Map //传递复杂些的参数 Map<String, Object...,Parcelable序列化对象 Serializable实现: ①业务Bean实现:Serializable接口,写上getter和setter方法 ②Intent通过调用putExtra(String...1)在使用内存的时候,Parcelable比Serializable性能高,所以推荐使用Parcelable。...尽管Serializable效率低点,但此时还是建议使用Serializable。
三、Serializable和Parcelable接口 本节主要讲解三方面的内容Serializable接口和Parcelable接口以及Binder,只有熟悉这这两个接口后,我们才能在后面更好地理解跨进程通信...Serializable和Parcelable接口可以完成对象的序列化的过程,当我们需要通过Intent和Binder传输数据时就需要使用Parcelable或者Serializable,有时候我们还需要把对象持久化到存储设备上或者通过网络传输给其他客户端...,强烈推荐使用Parcelable,因为Parcelable比Serializable性能高很多。...2、如果是持久化操作,推荐Serializable,虽然Serializable效率比较低,但是还是要选择它,因为在外界有变化的情况下,Parcelable不能很好的保存数据的持续性。...Parcel可以携带序列化后(flattened/marshalled/serialized,通过使用多种类型的writing函数或者Parcelable接口)的数据,在IPC的另外一个反序列化数据(变回反序列化的对象
Serializable vs Parcelable 这两者都是Android的序列化方式,不过还是有很大的区别的 Serializable的底层是通过IO来实现的,序列化是通过ObjectOutputStream...private void writeString(String str, boolean unshared) throws IOException...的内部,是通过Parcel来实现的,本质是native层的共享内存,不涉及io,性能更好,我们应该是尽量避免使用Serializable来序列化 parcel的Java层只是一个壳 先看下Java层的代码...来获取一个parcel对象 /** * Retrieve a new Parcel object...padded = pad_size(len); if ((mDataPos+padded) <= mDataCapacity) { restart_write: //printf("Writing
internalClone(); 在上一节中讲了java中Serializable与Parcelable的使用序列化与反序列化的问题。...实现了Serializable接口的Company public class Company implements Serializable {//Serializable接口是空的,没有声明的方法及常量...= null) { try { byteArrayOutputStream.close(); byteArrayOutputStream = null; } catch (IOException...= null) { try { objectOutputStream.close(); objectOutputStream = null; } catch (IOException e) {...= null) { try { byteArrayInputStream.close(); byteArrayInputStream = null; } catch (IOException e
领取专属 10元无门槛券
手把手带您无忧上云