编辑这个页面须要登录或更高权限!

Java ObjectInputStream 类

在本教程中,我们将借助示例学习Java ObjectOutputStream及其方法。

java.io包的ObjectInputStream类可用于读取ObjectOutputStream先前编写的对象。

它进行了InputStream抽象类。

Java ObjectInputStream类是Java InputStream的子类。

在学习ObjectInputStream类之前,请确保您了解ObjectOutputStream类

ObjectInputStream的工作原理

ObjectInputStream主要用于读取ObjectOutputStream写入的数据。

基本上,ObjectOutputStream将Java对象转换为相应的流。 这称为序列化。 这些转换后的流可以存储在文件中,也可以通过网络传输。

现在,如果需要读取这些对象,则将使用ObjectInputStream,它将把流转换回相应的对象。这称为反序列化。

创建一个ObjectInputStream

为了创建对象输入流,我们必须首先导入java.io.ObjectInputStream包。导入包后,就可以创建输入流。

//创建与指定文件链接的文件输入流
FileInputStream fileStream = new FileInputStream(String file);

//使用文件输入流创建对象输入流
ObjectInputStream objStream = new ObjectInputStream(fileStream);

在上面的示例中,我们创建了一个名为objStream的对象输入流,该对象输入流与名为fileStream的文件输入流链接。

现在,objStream可以使用读取文件中的对象。

ObjectInputStream的方法

ObjectInputStream类提供InputStream类中存在的不同方法的实现。

read()方法

  • read() - 从输入流中读取一个字节的数据

  • readBoolean() - 以布尔形式读取数据

  • readChar() - 以字符形式读取数据

  • readInt() - 以整数形式读取数据

  • readObject() - 从输入流中读取对象

示例1:Java ObjectInputStream

让我们看看如何使用ObjectInputStream类读取由ObjectOutputStream类创建的对象。

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

class Main {
    public static void main(String[] args) {

        int data1 = 5;
        String data2 = "This is nhooo";

        try {
            FileOutputStream file = new FileOutputStream("file.txt");
            ObjectOutputStream output = new ObjectOutputStream(file);

            //使用ObjectOutputStream写入文件
            output.writeInt(data1);
            output.writeObject(data2);

            FileInputStream fileStream = new FileInputStream("file.txt");
            //创建对象输入流
            ObjectInputStream objStream = new ObjectInputStream(fileStream);

            //使用readIng()方法
            System.out.println("整数数据 :" + objStream.readInt());

            //使用readObject()方法
            System.out.println("字符串数据: " + objStream.readObject());

            output.close();
            objStream.close();
        }
        catch (Exception e) {
            e.getStackTrace();
        }
    }
}

输出结果

整数数据: 5
字符串数据: This is nhooo

在上面的示例中,我们使用了readInt()和readObject()方法从文件中读取整数数据和对象数据。

在这里,我们使用了ObjectOutputStream将数据写入文件。 然后,我们使用ObjectInputStream从文件中读取数据。

示例2:Java ObjectInputStream

让我们看另一个实际的实例,

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

class Dog implements Serializable {

    String name;
    String breed;

    public Dog(String name, String breed) {
        this.name = name;
        this.breed = breed;
    }
}

class Main {
    public static void main(String[] args) {

        //创建一个Dog类的对象
        Dog dog = new Dog("Tyson", "Labrador");

        try {
            FileOutputStream file = new FileOutputStream("file.txt");

            //创建一个ObjectOutputStream
            ObjectOutputStream output = new ObjectOutputStream(file);

            //将对象写入输出流
            output.writeObject(dog);

            FileInputStream fileStream = new FileInputStream("file.txt");

            //创建一个ObjectInputStream
            ObjectInputStream input = new ObjectInputStream(fileStream);

            //读取对象
            Dog newDog = (Dog) input.readObject();

            System.out.println("狗的名字: " + newDog.name);
            System.out.println("犬种: " + newDog.breed);

            output.close();
            input.close();
        }

        catch (Exception e) {
            e.getStackTrace();
        }
    }
}

输出结果

狗的名字: Tyson
犬种: Labrador

在上面的示例中,我们创建了

  •  ObjectOutputStream使用名为file的FileOutputStream命名输出

  •  ObjectInputStream使用名为fileStream的FileInputStream命名输入

  • Dog类的对象dog

在这里,我们然后使用对象输出流将对象写入文件。并且,对象输入流从文件中读取对象。

注意:Dog类实现Serializable接口。这是因为ObjectOutputStream只将可序列化的对象写入输出流。

ObjectInputStream的其他方法

方法内容描述
available()返回输入流中的可用字节数
mark()标记输入流中已读取数据的位置
reset()将控件返回到输入流中设置了标记的点
skipBytes()从输入流中跳过并丢弃指定的字节
close()关闭对象输入流

Java 菜鸟教程
Java 流程控制
Java 数组
Java 面向对象(I)
Java 面向对象(II)
Java 面向对象(III)
Java 异常处理
Java 列表(List)
Java Queue(队列)
Java Map集合
Java Set集合
Java 输入输出(I/O)
Java Reader/Writer
Java 其他主题