一、什么是序列化?
答:
通俗的说就是让一个对象变成可存储可传输的过程就叫序列化。
二、什么时候用到序列化?
答:
1.当对象需要网络传输时需要将对象进行序列话才能进行传输
2.当对象需要进行存储时
三、如何将对象序列化
答:
实现序列化有两个接口 Serializable (序列化后可以保存到本地)和 Parcelable (序列化后不可以保存到本地)
首先介绍这两个接口的用法
Serializable : 首先让一个实体类继承这个接口,还有声明一个serialVersionUID 这个ID可声明也可以不声明,但是会对反序列化有影响。如果反序列实体类的serialVersionUID和序列化的的serialVersionUID不一样那么将会报错。
public class Music implements Serializable { private static final long serialVersionUID = 23l; //值可自定义 public String singer; public String songName; public Music() { } public String getSinger() { return singer; } public void setSinger(String singer) { this.singer = singer; } public String getSongName() { return songName; } public void setSongName(String songName) { this.songName = songName; } @Override public String toString() { return "Music{" + "singer='" + singer + '\'' + ", songName='" + songName + '\'' + '}'; } }
Music music = new Music(); music.setSongName("光辉岁月"); music.setSinger("beyong"); ObjectOutputStream objectOutputStream = new ObjectOutputStream( new FileOutputStream("/storage/emulated/0/Cache.txt")); objectOutputStream.writeObject(music); objectOutputStream.close();
Parcelable:用法比较复杂,不过写法很简单。只需要写好你的实体类然后实现这个接口再根据快捷键就可以了。
首先创建实体类实现接口
public class Human implements Parcelable{
然后重写接口里面的方法
public class Human implements Parcelable{ public String Name; public String weight; protected Human() { } protected Human(Parcel in) { Name = in.readString(); weight = in.readString(); } public static final Creator<Human> CREATOR = new Creator<Human>() { @Override public Human createFromParcel(Parcel in) { return new Human(in); } @Override public Human[] newArray(int size) { return new Human[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(Name); dest.writeString(weight); } public String getName() { return Name; } public void setName(String name) { Name = name; } public String getWeight() { return weight; } public void setWeight(String weight) { this.weight = weight; }
实体类写好了我们就开始传值了
Human human = new Human(); human.setName("necor"); human.setWeight("120kg"); Intent intent = new Intent(MainActivity.this, FirstActivity.class); Bundle bundle = new Bundle(); bundle.putParcelable("na", human); intent.putExtras(bundle); startActivity(intent);
四、反序列化
Serializable:
ObjectInputStream objectInputStream = new ObjectInputStream( new FileInputStream("/storage/emulated/0/Cache.txt")); Music music = (Music) objectInputStream.readObject(); objectInputStream.close(); Flog.d(TAG, "SerializeActivity DisSerialize music.toString : " + music.toString());
Parcelable:
Human human =(Human) getIntent().getParcelableExtra("na");
当你出现错误时那就会有可能是没有给权限,接下来你以为我会给你权限的图吗?---不给