zoukankan      html  css  js  c++  java
  • 第二章——Serializable的使用(跨进程使用和Intent的传递对象)

    一、Serializable类(JAVA本身具有的)

    简介:Serializable是一个接口。

    作用:是JAVA提供的序列化接口,实现序列化和反序列化的操作。

    二、跨进程使用

    1.事前准备

    public class Book implements Serializable {
    
        //注:此段可写也可不写 —— 稍后讲解 ①
        private static final long serialVersionUID = 13165131351L;
    
        private String mBookName;
        private int mBookId;
    /**
    *准备:创建Book类,并继承Seriaizable接口
    * */
    
        public Book(int bookId, String bookName) {
            mBookId = bookId;
            mBookName = bookName;
        }
    
        @Override
        public String toString() {
            return mBookId+""+mBookName;
        }
    }
    View Code

    2.序列化与反序列化

    //序列化过程
    Book book = new Book(123,"Android 开发艺术探索");
    FileOuputStream fos = new FileOutputStream("test.txt");
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(book);
    oss.close();
    
    
    
    //反序列化过程
    FileInputStream fis = new FileInputStream("test.txt");
    ObjectInputStream ois = new ObjectInputStream(fis);
    Book newBook = (Book)ois.readObject();
    ois.close();

    注:反序列化之后对象book与newBook数据相同,但两者不是同一个对象。

    3.原理

    当序列化的时候,系统会把当前类的serialVersionUID写入序列化的文件中,当反序列化的时候系统回去检测文件中的serivalVersionUID是否与当前类的serivalVersionUID相同,如果不相同就会反序列化失败。

    回答①:当我们继承Serializable的时候,系统会自动提供一个serialVersionUID值,但是当该类中有改变(如:成员变量 减少或者增加,我们将类拿去修改)就会改变系统提供的serialVersionUID值。

    但是,如果自己设置了serialVerionUID的值,当成员变量、方法 减少或者增加的时候,因为反序列化的是之前没有改变类的序列化,所以系统会尽可能恢复多的数据。如果改变类名和成员变量的类型,就还是会反序列化失败(结构都变了)。

    注:静态成员、用transient标记的成员变量不进行序列化

    三、Intent之间传递Serializable类(各个Activity传递对象的方法)

    //MainActivity.java
    Book book = new Book(123, "android开发艺术探索");
    Intent intent = new Intent(MainActivity.this, SecondActivity.class);
    intent.putExtra("book",book);
    startActivity(intent);
    
    //SecondActivity.java
    Intent intent = getIntent();
    Book book = intent.getSerializableExtra("book");

    只需要让对象继承Serializable接口就可以了,之后就用Intent传递。

  • 相关阅读:
    2 安装驱动出现异常
    1 Yoga3 系统装机总结.
    6 关于 Oracle NULL栏位和PL./SQL执行实验
    4 C#和Java 的比较
    3 委托、匿名函数、lambda表达式
    2 跨线程访问控件InvokeHelper类
    2 跨线程访问控件InvokeHelper类
    1 Winform 异步更新控件
    1 Winform 异步更新控件
    C# DataTable的詳細用法
  • 原文地址:https://www.cnblogs.com/rookiechen/p/5341949.html
Copyright © 2011-2022 走看看