📜  Java ObjectInputStream类

📅  最后修改于: 2020-09-26 15:12:58             🧑  作者: Mango

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

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

它扩展了InputStream抽象类。

Java ObjectInputStream class is a subclass of the Java InputStream.

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


ObjectInputStream的工作

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

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

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


创建一个ObjectInputStream

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

// Creates a file input stream linked with the specified file
FileInputStream fileStream = new FileInputStream(String file);

// Creates an object input stream using the file input stream
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 programiz";

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

            // Writing to the file using ObjectOutputStream
            output.writeInt(data1);
            output.writeObject(data2);

            FileInputStream fileStream = new FileInputStream("file.txt");
            // Creating an object input stream
            ObjectInputStream objStream = new ObjectInputStream(fileStream);

            //Using the readInt() method
            System.out.println("Integer data :" + objStream.readInt());

            // Using the readObject() method
            System.out.println("String data: " + objStream.readObject());

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

输出

Integer data: 5
String data: This is programiz

在上面的示例中,我们使用了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) {

        // Creates an object of Dog class
        Dog dog = new Dog("Tyson", "Labrador");

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

            // Creates an ObjectOutputStream
            ObjectOutputStream output = new ObjectOutputStream(file);

            // Writes objects to the output stream
            output.writeObject(dog);

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

            // Creates an ObjectInputStream
            ObjectInputStream input = new ObjectInputStream(fileStream);

            // Reads the objects
            Dog newDog = (Dog) input.readObject();

            System.out.println("Dog Name: " + newDog.name);
            System.out.println("Dog Breed: " + newDog.breed);

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

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

输出

Dog Name: Tyson
Dog Breed: Labrador

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

  • 使用FileOutputStream命名文件的 ObjectOutputStream命名输出
  • 使用名为FileStreamFileInputStream命名为ObjectInputStream 输入
  • Dog类的对象

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

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


ObjectInputStream的其他方法
Methods Descriptions
available() returns the available number of bytes in the input stream
mark() marks the position in input stream up to which data has been read
reset() returns the control to the point in the input stream where the mark was set
skipBytes() skips and discards the specified bytes from the input stream
close() closes the object input stream

要了解更多信息,请访问Java ObjectInputStream(官方Java文档)。