把对象转换为字节序列的过程称为对象的[b]序列化[/b]。
把字节序列恢复为对象的过程称为对象的[b]反序列化[/b]。
序列化(又叫串行化)就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个 ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
简单来说 序列化就是把Java对象储存在某一地方(硬盘、网络),以便于传输 (知道)
一个小例子
运行结果如下:
a = 25,b = 张三
a = 25,b = null
在上面的例子中,我将属性b前添加关键字transient,我们看到虽然我们序列化的对象a的属性值为“张三”,但是当我们反序列化之后发现这个属性为空,说明这个属性没有进行序列化。(以上内容整理于网络)
参考:http://www.cnblogs.com/xdp-gacl/p/3777987.html
把字节序列恢复为对象的过程称为对象的[b]反序列化[/b]。
序列化(又叫串行化)就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个 ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
简单来说 序列化就是把Java对象储存在某一地方(硬盘、网络),以便于传输 (知道)
一个小例子
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class TestTransient {
private static ObjectInputStream ois;
/**
* @param args
* @throws IOException
* @throws FileNotFoundException
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws FileNotFoundException,
IOException, ClassNotFoundException {
A a = new A(25, "张三");
System.out.println(a);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(
"d://mm.txt"));
oos.writeObject(a);
oos.close();
ois = new ObjectInputStream(new FileInputStream("d://mm.txt"));
a = (A) ois.readObject();
System.out.println(a);
}
}
class A implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
int a;
//transien修饰符 反序列化变量b;
transient String b;
public A(int a, String b) {
this.a = a;
this.b = b;
}
public String toString() {
return "a = " + a + ",b = " + b;
}
}
运行结果如下:
a = 25,b = 张三
a = 25,b = null
在上面的例子中,我将属性b前添加关键字transient,我们看到虽然我们序列化的对象a的属性值为“张三”,但是当我们反序列化之后发现这个属性为空,说明这个属性没有进行序列化。(以上内容整理于网络)
参考:http://www.cnblogs.com/xdp-gacl/p/3777987.html