------- <a target="blank">android培训</a>、<a target="blank">java培训</a>、期待与您交流! ----
关于IO接口原理的第五贴 生命不息,折腾不止!向上吧,骚年!!!
第一节、对象流
JDK提供的ObjectoutputStream和ObjectInputStream类是用于存储和读取基本类型数据或对象的过滤流。他的最强大之处就是可以把java中的对象写到数据源中
也能把对象从数据源中还原回来。用ObjectOutputStream类保存基本类型数据或对象的机制叫做序列化;用ObjectInputStream类读取基本数据类型或对象的机制叫做反序列化。ObjectOutputStream
和objectInputStream不能序列化static或transient修饰的成员变量。
定义一个序列化的student类。
public class Student implements java.io.Serializable {
private static final long serialVersionUID = 6858255444765880074L;
private int id ;
private String name;
private transient int age; //不需要序列化的属性
public Student(){}
public Student(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int getId() { return id; }
public String getName() { return name; }
public int getAge() { return age; }
public String toString() {
return "id=" + id +", name=" + name + ", age=" + age;
}
}
在student类的实例被序列化时,他的成员变量age不会被保存或读取,序列化的好处在于,他可以将任何实现了Serializable接口的对象转换为字节数据。
这些数据可以保存在数据源中,以后仍可以还原为原来的对象状态,及时这些数据通过网络传输到别处也能还原回来。
下面创建一个学生对象,并把它序列化到一个文件中。
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
/** 序列化示例 */
public class SerializationTest {
public static void main(String[] args) {
ObjectOutputStream oos = null;
try {
//创建连接到指定文件的对象输出流实例
oos = new ObjectOutputStream(
new FileOutputStream("D:\\IOTest\\objectSeri.dat"));
oos.writeObject(new Student(101, "张三", 22)); //把stu对象序列化到文件中
oos.flush(); //刷新输出流
System.out.println("序列化成功!!!");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (null != oos) {
oos.close(); //关闭输出流实例
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
下面再给出个反序列化的事例:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
/** 反序列化示例 */
public class DeserializationTest {
public static void main(String[] args) {
ObjectInputStream ois = null;
try {
//创建连接到指定文件的对象输入流实例
ois = new ObjectInputStream(
new FileInputStream("D:\\IOTest\\objectSeri.dat"));
Student stu = (Student) ois.readObject(); //读取对象
System.out.println(stu); //输出读到的对象信息
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (null != ois) {
ois.close(); //关闭对象流实例
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
程序运行的结果如下:id=101,name=张三,age=0
------- <a target="blank">android培训</a>、<a target="blank">java培训</a>、期待与您交流! --------
|