-------
android培训、
java培训、期待与您交流! ----------
序列化分为两大部分:序列化和反序列化
把Java对象转换成字节序列的过程称为对象的序列化
把字节序列恢复为Java的对象的过程称为对象的反序列化
对象序列化只要有两个用途:
1)把对象的字节序列永久的保存到硬盘上,通常是一个文件
2)在网络中传输字节序列
Java中有2个序列化对象的类:ObjectOutputStream负责是将对象序列化为字节序列,主要是通过writeObject()方法
ObjectInputStream负责是将字节序列转换为Java对象,主要是通过readObject()方法
ObjectOutputStream只能对Serializable接口的类的对象进行序列化,否则编译不通过
下面可以看一个对应的例子,在实现Serializable接口时,最好手动设置serialVersionUID值
public class Student implements Serializable{
//序列化类必须声明一个明确的 serialVersionUID 值
private static final long serialVersionUID = 1432L;
private String name;
private int age;
public String toString(){
return "Student[name="+name+",age = "+age+"]";
}
}
接着对这个对象持久化,也就是序列化
private static void saveObject() throws FileNotFoundException, IOException {
Student stu = new Student();
stu.setName("asdf");
stu.setShuxue(123);
stu.setYingyu(111);
stu.setYuwen(123);
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream("obj.object"));
oos.writeObject(stu);
} finally {
if (oos != null)
oos.close();
}
}
也可以反序列化
private static void getObject() throws FileNotFoundException, IOException,
ClassNotFoundException {
ObjectInputStream ois = null;
Student obj;
try {
ois = new ObjectInputStream(new FileInputStream("obj.object"));
obj = (Student) ois.readObject();
} finally {
if (ois != null)
ois.close();
}
System.out.println(obj.getYuwen()+obj.getName());
}
这样就对整个对象进行持久化操作
如果对象中的某个属性只想在内存,不想被持久化,该咋办呢?
可以在该属性直接加上transient修饰或是静态修饰,如private transient String name,那么name就不会被持久化了
------- android培训、 java培训、期待与您交流! ----------