java.io.ObjectInputStream extends OutputStream
ObjectOutputStream:对象的序列化流 作用把对象以流的方式写入到文件中
构造方法:
ObjectOutStream(OutputStream out):创建指定的OutputStream的ObjectOutputStream
参数:
OutputStream out:字节输出流
特有的成员方法:
void writeObject(Object obj):将指定的对象写入 ObjectOutputStream
使用步骤:
1.创建ObjectOutputStream对象,构造方法中传递字节输出流
2.使用ObjectOutputStream对象中的方法writeObject,把对象写入到文件中
3.释放资源
static关键字:静态关键字
静态优先于非静态加载到内存中(静态优先于对象进入到内存中)
被static修饰的成员变量不能被序列化的,序列化的都是对象
用static修饰变量后 private static int age;
再读对象结果 小美女0
transient关键字:瞬态关键字
被transient修饰的成员变量,不能被序列化
用transient修饰变量后 private transient int age;
再读对象结果 小美女0
如果以后不想成员变量被序列化就用transient
序列化和反序列化的时候,会抛出NotSerializableException没有序列化异常
类通过实现java.io.Seriolizable接口来启用序列化功能,未实现此接口的类无法使其任何状态序列化和反序列化
Serializable接口也叫标记型接口
要进行序列化和反序列化的类必须实现Serializable接口,就会给类添加一个标记
当我们进行序列化和反序列化的时候,就会检测类上是否有这个标记
有,则可以序列化,没有,则不能
Person类:
package demo45对象的序列化流;
import java.io.Serializable;
/*
序列化和反序列化的时候,会抛出NotSerializableException没有序列化异常
类通过实现java.io.Seriolizable接口来启用序列化功能,未实现此接口的类无法使其任何状态序列化和反序列化
Serializable接口也叫标记型接口
要进行序列化和反序列化的类必须实现Serializable接口,就会给类添加一个标记
当我们进行序列化和反序列化的时候,就会检测类上是否有这个标记
有,则可以序列化,没有,则不能
*/
public class Person implements Serializable {
//当clsss文件在序列化之后发生了修改,它的序列号发生改变,可以自己定义一个序号用final修饰了他就是常量
private static final long serialVersionUID=1L;
private String name;
public int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person() {
}
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;
}
}
DemoObjectOutputStream类:
package demo45对象的序列化流;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
/*
java.io.ObjectInputStream extends OutputStream
ObjectOutputStream:对象的序列化流 作用把对象以流的方式写入到文件中
构造方法:
ObjectOutStream(OutputStream out):创建指定的OutputStream的ObjectOutputStream
参数:
OutputStream out:字节输出流
特有的成员方法:
void writeObject(Object obj):将指定的对象写入 ObjectOutputStream
使用步骤:
1.创建ObjectOutputStream对象,构造方法中传递字节输出流
2.使用ObjectOutputStream对象中的方法writeObject,把对象写入到文件中
3.释放资源
static关键字:静态关键字
静态优先于非静态加载到内存中(静态优先于对象进入到内存中)
被static修饰的成员变量不能被序列化的,序列化的都是对象
用static修饰变量后 private static int age;
再读对象结果 小美女0
transient关键字:瞬态关键字
被transient修饰的成员变量,不能被序列化
用transient修饰变量后 private transient int age;
再读对象结果 小美女0
如果以后不想成员变量被序列化就用transient
*/
public class DemoObjectOutputStream {
public static void main(String[] args) throws IOException {
//创建ObjectOutputStream对象,构造方法中传递字节输出流
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("E:\\多线程\\person.txt"));
//2.使用ObjectOutputStream对象中的方法writeObject,把对象写入到文件中
oos.writeObject(new Person("小美女",18));
//3.释放资源
oos.close();
}
}