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;
import org.junit.Test;
public class SerializeDemo {//将person信息序列化存储起来,然后读取出来
@Test
public void demo1(){
try {
ObjectOutputStream out = new ObjectOutputStream(
new FileOutputStream("f:\\a\\c.txt"));
Person p2 = new Person("rose",20);
out.writeObject(p2);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void demo2(){
try {
ObjectInputStream in = new ObjectInputStream(
new FileInputStream("f:\\a\\c.txt"));
Person p = (Person) in.readObject();
System.out.println(p);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//只有对象中的非静态变量才会被序列化, 静态变量和方法都是不会被存入文件的。
class Person implements Serializable{
private String name;
private int age;
public static int count;
//序列化时,静态变量是不会存在于对象图即静态变量是不会被存入的。
private transient int num = 30; //如果不想序列化某个非静态变量, 可以把它设成瞬时
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
count++;
}
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 name + ", " + age+", count:"+count+", num:"+num;
}
}
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import org.junit.Test;
/*序列化
将一个对象存放到某种类型的永久存储器上称为保持。如果一个对象可以被存放到磁盘或磁带上,
或者可以发送到另外一台机器并存放到存储器或磁盘上,那么这个对象就被称为可保持的。
(在Java中,序列化、持久化、串行化是一个概念。)
java.io.Serializable接口没有任何方法,它只作为一个“标记者”,
用来表明实现了这个接口的类可以考虑串行化。
类中没有实现Serializable的对象不能保存或恢复它们的状态。
*对象图
当一个对象被串行化时,只有对象的数据被保存;方法和构造函数不属于串行化流。
如果一个数据变量是一个对象,那么这个对象的数据成员也会被串行化。
树或者对象数据的结构,包括这些子对象,构成了对象图。
*瞬时 transient
防止对象的属性被序列化
public class SerializeDemo {//将person信息序列化存储起来,然后读取出来
@Test
public void demo1(){
try {
ObjectOutputStream out = new ObjectOutputStream(
new FileOutputStream("f:\\a\\c.txt"));
Person p2 = new Person("rose",20);
out.writeObject(p2);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void demo2(){
try {
ObjectInputStream in = new ObjectInputStream(
new FileInputStream("f:\\a\\c.txt"));
Person p = (Person) in.readObject();
System.out.println(p);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//只有对象中的非静态变量才会被序列化, 静态变量和方法都是不会被存入文件的。
class Person implements Serializable{
private String name;
private int age;
public static int count;
//序列化时,静态变量是不会存在于对象图即静态变量是不会被存入的。
private transient int num = 30; //如果不想序列化某个非静态变量, 可以把它设成瞬时
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
count++;
}
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 name + ", " + age+", count:"+count+", num:"+num;
}
}