zoukankan      html  css  js  c++  java
  • 关于Intent传递对象

    对象的序列化和反序列化

    当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。

    Java对象转换为字节序列的过程称为对象的序列化。

    把字节序列恢复为Java对象的过程称为对象的反序列化。

    对象的序列化主要有两种用途:

    1)把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;

    2)在网络上传送对象的字节序列。

    在用intent传递对象之前,要将对象序列化(基本类型和String已经实现序列化)要想传递自定义的对象就有序列化。序列化有两种方式 

    1、实现Serializable接口

     1 import java.io.Serializable;
     2 
     3 public class Student implements Serializable {
     4     private String name;
     5     int age;
     6 
     7     public String getName() {
     8         return name;
     9     }
    10 
    11     public void setName(String name) {
    12         this.name = name;
    13     }
    14 
    15     public int getAge() {
    16         return age;
    17     }
    18 
    19     public void setAge(int age) {
    20         this.age = age;
    21     }
    22 
    23 }

    2实现Parcelable接口 

    import android.os.Parcel;
    import android.os.Parcelable;
    
    /**
     * @author ypeng*/
    public class DishCom implements Parcelable {
        private String id;
        private String res_id;
        private String dish_id;
        private String user_id;
        private String score;
        private String comment;
        private String recommend;
        private String reply;
        private String picture;
        private String create_time;
    
        public DishCom() {
        };
    
        public DishCom(String id, String res_id, String dish_id, String user_id,
                String score, String comment, String recommend, String reply,
                String picture, String create_time) {
            super();
            this.id = id;
            this.res_id = res_id;
            this.dish_id = dish_id;
            this.user_id = user_id;
            this.score = score;
            this.comment = comment;
            this.recommend = recommend;
            this.reply = reply;
            this.picture = picture;
            this.create_time = create_time;
        }
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getRes_id() {
            return res_id;
        }
    
        public void setRes_id(String res_id) {
            this.res_id = res_id;
        }
    
        public String getDish_id() {
            return dish_id;
        }
    
        public void setDish_id(String dish_id) {
            this.dish_id = dish_id;
        }
    
        public String getUser_id() {
            return user_id;
        }
    
        public void setUser_id(String user_id) {
            this.user_id = user_id;
        }
    
        public String getScore() {
            return score;
        }
    
        public void setScore(String score) {
            this.score = score;
        }
    
        public String getComment() {
            return comment;
        }
    
        public void setComment(String comment) {
            this.comment = comment;
        }
    
        public String getRecommend() {
            return recommend;
        }
    
        public void setRecommend(String recommend) {
            this.recommend = recommend;
        }
    
        public String getReply() {
            return reply;
        }
    
        public void setReply(String reply) {
            this.reply = reply;
        }
    
        public String getPicture() {
            return picture;
        }
    
        public void setPicture(String picture) {
            this.picture = picture;
        }
    
        public String getCreate_time() {
            return create_time;
        }
    
        public void setCreate_time(String create_time) {
            this.create_time = create_time;
        }
    
        @Override
        public int describeContents() {
            // TODO Auto-generated method stub
            return 0;
        }
    
        @Override
        public void writeToParcel(Parcel parcel, int flags) {
            // TODO Auto-generated method stub
            parcel.writeString(this.id);
            parcel.writeString(this.res_id);
            parcel.writeString(this.dish_id);
            parcel.writeString(this.user_id);
            parcel.writeString(this.score);
            parcel.writeString(this.comment);
            parcel.writeString(this.recommend);
            parcel.writeString(this.reply);
            parcel.writeString(this.picture);
            parcel.writeString(this.create_time);
    
        }
    
        public static final Parcelable.Creator<DishCom> CREATOR = new Creator<DishCom>() {
    
            public DishCom[] newArray(int size) {
                return new DishCom[size];
            }
    
            public DishCom createFromParcel(Parcel parcel) {
                return new DishCom(parcel.readString(), parcel.readString(),
                        parcel.readString(), parcel.readString(),
                        parcel.readString(), parcel.readString(),
                        parcel.readString(), parcel.readString(),
                        parcel.readString(), parcel.readString());
            }
        };
    }

    其他:

      1.在使用内存的时候,Parcelable 类比Serializable性能高,所以推荐使用Parcelable类。
      2.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。
      3.Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。尽管Serializable效率低点, 也不提倡用,但       在这种情况下,还是建议你用Serializable 。

  • 相关阅读:
    使用RedisTemplate的操作类访问Redis(转载)
    Redis集群方案(来自网络)
    Scale-up and Scale-out(转载)
    数据结构和算法分析 优先队列
    数据结构和算法分析 排序
    linux下的常用命令
    Java HashMap的工作原理(转载)
    二叉查找树(转载)
    Redis实现之对象(三)
    Redis实现之对象(二)
  • 原文地址:https://www.cnblogs.com/snowspace/p/3293219.html
Copyright © 2011-2022 走看看