IPC基础
来源:互联网 发布:用java打印对称三角形 编辑:程序博客网 时间:2024/05/18 02:53
IPC的一些基础概念,主要包含三方面的内容:Serializable接口、Parcelable接口以及Binder。
1、Serializable接口
Serializable是 Java提供的一个序列化接口,它是一个空接口,为对象提供标准的序列化和反序列化操作。实现一个对象的序列化,只需要这个类实现Serializable接口并声明一个serialVersionUID即可。
public class User implements Serializable{ private static final long serialVersionUID = 519067123721295773L; private int userId; private String userName; private boolean isMale; ......}
只需采用ObjectOutputStream和ObjectInputStream即可进行对象的序列化和反序列化:
//序列化过程User user = new User();ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("cache.txt"));oos.writeObject(user);oos.close();//反序列化ObjectInputStream ois = new ObjectInputStream(new FileInputStream("cache.tex"));User newUser = (User) ois.readObject();ois.close();
serialVersionUID有什么作用呢?
序列化的时候系统会把当前类的serialVersionUID写入序列化的文件中(也可能是其他中介 ),反序列化的时候系统会去检测文件中的serialVersionUID,看它是否和当前类的serialVersionUID一致,如果一致就说明序列化的类的版本和当前类的版本是相同的,这个时候就可以成功反序列化,否则就说明当前类和序列化的类相比发生了某些改变 ,就无法正常序列化。
另外,静态成员不属于对象,不会参加序列化过程,用transient关键字标记的成员变量不参与序列化过程。具体可以阅读Java编程思想序列化相关内容。
2、Parcelable接口
Parcelable也是一个接口,只要实现这个接口,一个类的对象就可以实现序列化并可以通过Intent和Binder传递。
public class Person implements Parcelable { private int personId; public String personName; private boolean isMale; public Book book; private Person(Parcel in) { personId = in.readInt(); personName = in.readString(); isMale = in.readInt() == 1; book = in.readParcelable(Thread.currentThread().getContextClassLoader()); } public Person(int personId, String personName, boolean isMale) { this.personId = personId; this.personName = personName; this.isMale = isMale; } public static final Creator<Person> CREATOR = new Creator<Person>() { @Override public Person createFromParcel(Parcel in) { return new Person(in); } @Override public Person[] newArray(int size) { return new Person[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel parcel, int i) { parcel.writeInt(personId); parcel.writeString(personName); parcel.writeInt(isMale ? 1 : 0); parcel.writeParcelable(book, 0); }}
Parcel内部包装了可序列化的数据,可以在Binder中自由传输。在序列化过程中需要实现的功能有序列化、反序列化和内容描述。序列化功能由writeToParcel方法来完成,最终是通过Parcel中的一系列write方法来完成的;反序列化功能由CREATOR来完成,其内部标明了如何创建序列化对象和数组,并通过Parcel的一系列read方法来完成反序列化过程。
Parcelable的方法说明
Serializable和Parcelable如何选取呢?
Serializable是 Java中序列化的接口,开销 较大,序列化和反序列化需要大量的I/O操作。而Parcelable是 Android中的序列化方式,更适合在Android平台上,首选Parcelable方式,缺点就是使用起来比较麻烦。Parcelable主要用在内存序列化上,通过Parcelable将对象序列化到存储设备中或者在网络中传输也是可以的,但这个过程比较负责,推荐使用Serializable方式 。
- IPC基础
- IPC基础
- IPC基础
- IPC基础
- IPC基础
- IPC基础
- IPC基础小记
- Android IPC基础
- IPC基础概念介绍
- IPC基础概念
- System V IPC基础
- IPC机制---03 IPC基础概念介绍
- IPC(二)---IPC基础概念介绍
- ipc$基础入侵原理知识
- Android IPC基础概念介绍
- IPC基础小记 关于Binder
- IPC基础概念---Serializable接口
- IPC基础概念---Parcelable接口
- 白话空间统计二十一:密度分析番外:公交广告投放
- UIImageView有时候设置contentMode不管用
- 【技巧】修改windows10在高分屏下的应用的dpi
- 关于指针的小杂碎
- [Q学习]3 QObject的拷贝构造函数与赋值运算符
- IPC基础
- 数学推公式题
- string
- 值对象
- Java 方法
- C语言中一类特殊的数组越界!!
- 数据结构之排序:希尔排序
- 自己写的五子棋
- 安卓源码学习地址整理 ( 更新中 )