【Android】Android中Serializable接口的定义和使用

1、序列化是干什么的?

       简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。

2、什么情况下需要序列化   
    a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
    b)当你想用套接字在网络上传送对象的时候;
    c)当你想通过RMI传输对象的时候;

3、Parcelable和Serializable的区别:

内存间数据传输时推荐使用Parcelable,如activity间传输数据

保存到本地或者网络传输时推荐使用Serializable

 

serialVersionUID 用来表明类的不同版本间的兼容性。

有两种生成方式: 一个是默认的1L;另一种是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段 。

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

========================================

SerializableDemo:MainActivity.java通过Serializable接口保存数据并跳转到FirstActivity.java,在FirstActivity.java中读取数据。

Person类

package com.example.serializetest;

import java.io.Serializable;
public class Person implements Serializable{
    
    private static final long serialVersionUID = 1L;
    // 成员变量
    private int id;
    private String name;
    
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

   
}

MainActivity.java

         // 封装数据
        Person p = new Person();
        p.setId(320840);
        p.setName("小伙子");
        Intent i = new Intent(MainActivity.this, FirstActivity.class);
        i.putExtra("Person", p);
        startActivity(i);    

FirstActivity.java

       Person p = (Person)getIntent().getSerializableExtra("Person");       
       System.out.println("身份证"+p.getId());
       System.out.println("姓名"+p.getName());    

 下载地址:http://download.csdn.net/detail/xubuhang/8695671

  其他例子:http://www.tuicool.com/articles/2ymUVn

  传递List<Object>传递List<Object>的方法:http://blog.csdn.net/wirelessqa/article/details/8589200

posted @ 2015-05-13 15:05  绚丽星空  阅读(11866)  评论(0编辑  收藏