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