IPC基础概念

IPC基础概念主要包括三方面:Serializable接口、Parcelable接口及Binder。

1.Serializable接口

           Serializable接口是Java提供的一个序列化接口,它是一个空接口,为对象提供序列化和反序列化操作。使用Serializable来实现序列化非常简单,只需在一个类的声明中指定一个类似下面的标识即可自动实现默认的序列化过程。

private static final long serialVersionUID=8711368828919983004L

实际上serialVersionUID也不是必须的,不声明也可以实现序列化,只是起到辅助作用。

User类就是一个实现了Serializable接口的类,他可以被序列化和反序列化。

public User implements Serializable{
//serialVersionUID起到辅助作用,序列化的时候系统会把当前类的serialVersionUID写入文件中,当反序列化时候系统会检测文件中的serialVersionUID是否与当前类中的serialVersionUID一致,如果一致就可以反序列化成功,否则说明当前类和反序列化类相比发生了变化,会导致失败。
    private static final long serialVersionUID=519067123721295772L;
    
    public int userId;
    public String userName;
    public boolean isMale;
}

如何进行序列化和反序列化?

ObjectOutputStream和ObjectInputStream即可。

//序列化过程
User user=new User(0,"jake",true);
ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("cache.txt"));
out.writeObject(user);
out.close();


//反序列化过程
ObjectInputStream in =new ObjectInputStream(new FileInputStream("cache.txt"));
User newUser=(User)in.readObject();
in.close();

2.Android系统提供了新的序列化方式,Parcelable接口。下面介绍Parcelable接口,只要实现这个接口,一个类的对象就可以实现序列化并可以通过intent和Binder传递。

public class User implements Parcelable{
    public int userId;
    public String userName;
    public boolean isMale;

    public Book book;
    
    public User(int userId,String userName, boolean isMale){
        this.userId=userId;
        this.userName=userName;
        this.isMale=isMale;
    }
    
    public int describeContents(){
        return 0;
    }
    
    //序列化功能
    public void writeToParcel(Parcel out, int flags){
        out.writeInt(useId);
        out.writeString(userName);
        out.writeInt(isMale?1:0);
        out.writeParcelable(book,0);
    }

    //反序列化功能
    public static final Parcelable.Creator<User>CREATOR=new Parcelable.Creator<User>(){
        public User createFromParcel(Parcel in){
            return new User(in);
        }
        
        public User[] newArray(int size){
            return new User[size];
        }
    };
    
    private User(Parcel in){
        userId=in.readInt();
        userName=in.readString();
        isMale=in.readInt()==1;
        book=in.readParcelable(Thread.currentThread().getContextClassLoader());
    }

}

Parcelable接口和Serializable接口的区别及适用范围?

Serializable接口是Java提供的序列化接口,使用简单但开销大。

Parcelable接口是Android提供的序列化接口,更适合使用再Android平台上,缺点稍微复杂,但效率高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值