程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

第五课 序列化接口

发布于2021-03-13 14:20     阅读(1310)     评论(0)     点赞(6)     收藏(4)


1、序列化接口

接口特点适用场景
SerializableJava中的序列化接口,使用简单,但是开销很大。将对象序列化到存储设备或将对象序列化后通过网络传输时,用Serializable较简单。
ParcelableAndroid中的序列化方式,使用稍麻烦,但效率很高。主要用于内存序列化,性能好。

2、Serializable接口

Serializable是一个空接口,为对象提供标准的序列化和反序列化操作。实现Serializable接口示例:

  1. public Class User implements Serializable {
  2. private static final long serialVersionUID = 92389236732922971L;
  3. public int userId;
  4. public String userName;
  5. public boolean isMale;
  6. }

    注:

  • 静态成员变量不参与序列化
  • 用transient关键字标记的成员变量不参与序列化

对象的序列化和反序列化操作:

  1. //序列化过程
  2. User user = new User(0, "joker", true);
  3. ObjectOutputStream out = new ObjectOutStream( new FileOutputStream("cache.txt") );
  4. out.writeObject(user);
  5. out.close();
  6. //反序列化过程
  7. ObjectInputStream in = new ObjectInputStream( new FileInputStream("cache.txt") );
  8. User user = (User) in.readObject();
  9. in.close();

3、Parcelable接口

Parcelable接口实现示例:

  1. public class User implements Parcelable {
  2. public int userID;
  3. public String userName;
  4. public boolean isMale;
  5. public Book book;
  6. public User (int userID, String userName, boolean isMale) {
  7. this.userID= userID;
  8. this.userName= userName;
  9. this.isMale= isMale;
  10. }
  11. @Override
  12. public int describeContents() {
  13. return 0;
  14. }
  15. @Override
  16. public void writeToParcel(Parcel dest, int flags) {
  17. dest.writeInt(this.userID);
  18. dest.writeString(this.userName);
  19. dest.writeInt(isMale ? 1 : 0);
  20. dest.writeParcelable(book, 0);
  21. }
  22. protected User(Parcel in) {
  23. this.userID= in.readInt();
  24. this.userName= in.readString();
  25. this.isMale= in.readInt() == 1;
  26. this.book= in.readParcelable(Thread.currentThread().getContextClassLoader());
  27. }
  28. public static final Creator<User> CREATOR = new Creator<User>() {
  29. @Override
  30. public User createFromParcel(Parcel source) {
  31. return new User(source);
  32. }
  33. @Override
  34. public User[] newArray(int size) {
  35. return new User[size];
  36. }
  37. };
  38. }
Parcelable的方法说明
方法功能标记位
createFromParcel从序列化后的对象中创建原始对象 
newArray(int size)创建指定长度的原始对象数组 
User(Parcel in)从序列化后的对象中创建原始对象 
writeToParcel(Parcel out, int flags)将当前对象写入序列化结构中,其中flags为标志位,1表示当前对象需要作为返回值返回,不能立即释放。一般情况都用0。PARCELABLE_WRITE_RETURN_VALUE
describeContents返回当前对象的内容描述,如果含有文件描述符,返回1,否则返回0。一般为0。CONTENTS_FILE_DESCRIPTOR

 

 

 

原文链接:https://blog.csdn.net/wishxiaozhu/article/details/114675143



所属网站分类: 技术文章 > 博客

作者:木得事

链接:http://www.javaheidong.com/blog/article/114174/955e6520713480f3193c/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

6 0
收藏该文
已收藏

评论内容:(最多支持255个字符)