IO流加强之序列化

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;


/*序列化
   将一个对象存放到某种类型的永久存储器上称为保持。如果一个对象可以被存放到磁盘或磁带上,
   或者可以发送到另外一台机器并存放到存储器或磁盘上,那么这个对象就被称为可保持的。
   (在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;
}

   }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值