您的位置:首页 > 其它

IO流(对象的序列化和反序列化)

2016-01-06 05:09 543 查看
ObjectOutputStream-对象的序列化

public class Io55_1 {
public static void main(String[] args) throws IOException {
writeObj();
}

public  static void writeObj() throws IOException, IOException {

ObjectOutputStream oos=new ObjectOutputStream(  new FileOutputStream("obj.object"));
//对象序列化。被序列化的对象必须实现Serializable接口
oos.writeObject(new Person("小强",30));

oos.close();
}
}

public class Person implements Serializable/*标记接口*/{
private String name;
private int age;

public Person(String name, int age) {
super();
this.name = name;
this.age = 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;
}

}


IO流(ObjectInputStream-对象的反序列化)

public class Io56_1 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
readObj();
}
//反序列化(就是读取Object对象)
private static void readObj() throws  IOException, ClassNotFoundException {
ObjectInputStream ois=new ObjectInputStream(new FileInputStream("obj.object"));

Person p=(Person) ois.readObject();

System.out.println(p.getName()+":"+p.getAge());
ois.close();
}

public  static void writeObj() throws IOException, IOException {

ObjectOutputStream oos=new ObjectOutputStream(  new FileOutputStream("obj.object"));
//对象序列化。被序列化的对象必须实现Serializable接口
oos.writeObject(new Person("小强",30));

oos.close();
}
}


其他提醒

/*
* 实现Serializable接口用于给被序列化的类加入ID号
* 用于判断类和对象是不是同一个版本
* */
public class Person implements Serializable/*标记接口*/{
/*IO57
* private static final long serialVersionUID = 9527L;如果不写。每一次编译的时候。可能会因为编译器的
* 不同,或者修改的Person类的内容。就会可能导致Serializable产生的serialVersionUID不一致。就会导致
* 不能够反序列化(读取文件中的内容)不能完成。
*
* 如果定义了该serialVersionUID = 9527L(值随便写);就不会让虚拟机自己计算产生serialVersionUID。故就可以
* 保证serialVersionUID的一致。就能够保证可以正常的反序列化
*/
private static final long serialVersionUID = 9527L;

/*IO58
* transient:非静态数据不想被序列化可以使用这个关键字
*
* static修饰的数据。不会被序列化。(结果age=0,是因为在方法区里面会有一个默认值就是0)
* **/
private transient String name;
private static int age;

public Person(String name, int age) {
super();
this.name = name;
this.age = 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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  io流