概念:什么是序列化与反序列化
序列化:是将对象状态转换为可保存或传输的格式的过程
就是下面这个家伙Bean,本来是不能建立到磁盘中的,但是序列化之后,就可以保存到本地磁盘了
文件内容:
反序列化:将磁盘中的数据转为可在android中显示的值
就是从下面这个家伙user.txt中,获取值,设置到界面上去
1.全部代码:
public class SerializableTest {
public static void main(String[] args) throws Exception {
User user=new User();
user.setName("sunweihao");
user.setAge(100);
// writeUser(user);
//反序列化
User user2=readUser();
System.out.println(user2.toString());
}
/**
* 反序列化:从磁盘中读取数据
* @return
* @throws Exception
*/
private static User readUser() throws Exception {
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(new File("d://android/user.txt")));
User objectUser = (User) objectInputStream.readObject();
return objectUser;
}
/**
* 序列化:将数据写到本地磁盘
* @param user
* @throws IOException
*/
private static void writeUser(User user) throws IOException {
//创建对象输出流
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("d://android/user.txt")));
//输出对象到本地
oos.writeObject(user);
//关闭资源
oos.close();
}
}
public class User implements Serializable {
private String name;
//短暂的态,添加了这个关键字的变量是不会被序列化出去的
private transient int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
执行结果:
2.步骤:
- 普通bean类实现Serializable接口即可
- 写入电脑磁盘中(序列化):
//创建对象输出流
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("d://android/user.txt")));
//输出对象到本地
oos.writeObject(user);
//关闭资源
oos.close();
- 读取:
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(new File("d://android/user.txt")));
User objectUser = (User) objectInputStream.readObject();
return objectUser;
3.问题与关键:
下面中的transient加上后,是不会被序列化的
private transient int age;