对象流(ObjectI/OStream)
程序员文章站
2024-03-04 15:33:11
...
对象流:存储对象的流
* 对象的序列化:指将一个JAVA对象写入IO流
* 对象的反序列化:指将一个IO流回复成JAVA对象
* 序列化的作用:序列化机制使得对象可以脱离程序的运行而独立存在
* 对象的序列化:指将一个JAVA对象写入IO流
* 对象的反序列化:指将一个IO流回复成JAVA对象
* 序列化的作用:序列化机制使得对象可以脱离程序的运行而独立存在
* 要求:如果需要让某个对象可以支持序列化机制,必须让它的类是可序列化的(serializable),为了让某个类是可序列化的,该 类必须实现Serializable接口或者Externalizable接口。
class Person implements Serializable {
private String name;
private int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person() {
super();
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "Person [名字=" + name + ", 年龄=" + age + "]";
}
}
class Student2 implements Serializable {
private String className;
private Person per;
public Student2(String className, Person per) {
super();
this.className = className;
this.per = per;
}
public Student2() {
super();
}
@Override
public String toString() {
return "Student [班级名=" + className + ", per=" + per + "]";
}
public String getClassName() {
return className;
}
public Person getPer() {
return per;
}
public void setClassName(String className) {
this.className = className;
}
public void setPer(Person per) {
this.per = per;
}
}
public class ObjectStreamDemo {
public static void main(String[] args) throws Exception {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("C:\\Users\\廖兴广\\Desktop\\测试.txt"));// ObjectOutputStream修饰文件输出流
Person s = new Person("孙悟空", 22);
Student2 swk = new Student2("国学一班", s);
oos.writeObject(swk);
/*
* 一个对象只能被序列化一次,序列化之后对对象的更新并不能波及序列化对象,
*/
swk.setClassName("粤语版");// 没有用
swk.getPer().setName("某某");// 还是没有用,见上面
Person z = new Person("猪八戒", 19);
Student2 zbj = new Student2("国学二班", z);
oos.writeObject(zbj);
oos.close();
}
}
IN:
public class ObjectInStreamDemo {
public static void main(String[] args) throws Exception {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("C:\\Users\\廖兴广\\Desktop\\测试.txt"));
Object one = ois.readObject();
System.out.println(one);
Student2 two = (Student2) ois.readObject();// 向下转型为Student
System.out.println(two);
}
}
JAVA的序列化机制采用了一种特殊的序列化算法:
①所有保存到磁盘文件中的对象都有一个序列化编号;
②当程序试图序列化一个对象的时候,程序将会先检查该对象是否被序列化过,(本次JVM虚拟机中),系统才会将该对象转换成字节序列并输出。
③如果该对象已经被序列化,那么程序将会直接输出他的序列化编号,而不会再将其序列化一次。
序列化问题;
①当采用transient修饰词修饰的时候,JAVA不会对该成员变量序列化
上一篇: 7-对象流
下一篇: PHP学习笔记——数组的基本概念及分类