IO流之序列化流(七)

这是我参与更文挑战的第 15 天,活动详情查看: 更文挑战

日积月累,水滴石穿 ?

一、ObjectOutputStream

java.io.ObjectOutputStream extends OutputStream,将Java对象的原始数据类型写出到文件,实现对象的持久存储。也就是序列化。只有实现java.io.Serializable接口的对象才能写入流中。

  • 继承自父类的成员方法:
    • void close():关闭此输出流并释放与此流相关联的任何系统资源。

    • void flush():刷新此输出流并强制任何缓冲的输出字节被写出。

    • void write(byte[] b):将 b.length字节从指定的字节数组写入此输出流。

    • void write(byte[] b, int off, int len):从指定的字节数组写入 len个字节,从偏移 off开始输出到此输出流。

    • void write(int b):将指定的字节写入此输出流。

  • 特有的成员方法
    • void writeObject(Object obj):将指定的对象写入ObjectOutputStream中。

构造方法

  • public ObjectOutputStream(OutputStream out) : 创建一个指定OutputStreamObjectOutputStream对象。

构造举例,代码如下:

FileOutputStream fos = new FileOutputStream("a.txt"); 
ObjectOutputStream out = new ObjectOutputStream(fos);
复制代码

参数

OutputStream out:字节输出流

写出对象

  • public final void writeObject (Object obj) : 将指定的对象写入到文件中。

提供一个 Student 对象,对象需要实现Serializable接口,不然会抛出一个名为NotSerializableException的异常。

serialVersionUID:该版本号的目的在于验证序列化的对象和对应类是否版本匹配,可以防止出现InvalidClassException异常。

public class Student implements Serializable{

    private static final long serialVersionUID = 1L;

    private Long id;
    private String name;
     /**
     * transient瞬态修饰成员,不会被序列化
     */
    private transient Integer age;

    //Get Set 进行省略。。。。
}

 public static void main(String[] args) throws Exception {
    FileOutputStream fos = new FileOutputStream("ee.txt");
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    Student student = new Student();
    student.setId(1L);
    student.setName("GOGNJ");
    student.setAge(24);
    oos.writeObject(student);

    oos.close();
    fos.close();
}
复制代码

二、ObjectInputStream

java.io.ObjectOutputStream extends InputStream,把文件中保存的对象,以流的方式读取出来使用。也就是反序列化

  • 继承自父类的成员方法:
    • void close():关闭此输入流并释放与流相关联的任何系统资源。
    • abstract int read():从输入流读取数据的下一个字节。
    • int read(byte[] b):从输入流读取一些字节数,并将它们存储到缓冲区 b 。
    • int read(byte[] b, int off, int len):从输入流读取最多 len字节的数据到一个字节数组。
  • 特有的成员方法:
    • Object readObject():从ObjectInputStream读取一个对象。

构造方法

  • ObjectInputStream(InputStream in):创建从指定的InputStream读取的ObjectInputStream对象。

构造举例,代码如下:

 FileInputStream fis = new FileInputStream("ee.txt");
 ObjectInputStream ois = new ObjectInputStream(fis);
复制代码

参数

InputStream in:字节输入流

读取对象

  • public final Object readObject () : 读取一个对象。
public static void main(String[] args) throws Exception {
    FileInputStream fis = new FileInputStream("ee.txt");
    ObjectInputStream ois = new ObjectInputStream(fis);
    Student s = (Student)ois.readObject();
    ois.close();
    fis.close();
    System.out.println(s.toString());
}

输出结果:Student{id=1, name='GOGNJ', age=null}
复制代码
  • 如你对本文有疑问或本文有错误之处,欢迎评论留言指出。如觉得本文对你有所帮助,欢迎点赞和关注。
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享