English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriales básicos de Java

Java 流程控制

Java 数组

Java 面向对象(I)

Java 面向对象(II)

Java 面向对象(III)

Manejo de excepciones en Java

Java 列表(List)

Java Queue(队列)

Java Map集合

Java Set集合

Java 输入输出(I/O)

Java Reader/Writer

Java 其他主题

Java ObjectInputStream 类

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

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

它进行了InputStream抽象类。

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

ObjectInputStream的工作原理

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

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

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

Crear un ObjectInputStream

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

//创建与指定文件链接的文件输入流
FileInputStream fileStream = new FileInputStream(String file);
//Crear un flujo de entrada de objetos utilizando un flujo de entrada de archivo
ObjectInputStream objStream = new ObjectInputStream(fileStream);

En el ejemplo anterior, creamos un flujo de entrada de objetos llamado objStream, que está vinculado al flujo de entrada de archivo llamado fileStream.

Ahora, objStream puede usarse para leer objetos del archivo.

Métodos de ObjectInputStream

La clase ObjectInputStream proporciona implementaciones de diferentes métodos que existen en la clase InputStream.

Método read()

  • read() - Leer un byte de datos del flujo de entrada

  • readBoolean() - Leer datos en forma de booleano

  • readChar() - Leer datos en forma de carácter

  • readInt() - Leer datos en forma de entero

  • readObject() - Leer un objeto del flujo de entrada

Ejemplo1:Java ObjectInputStream

Veamos cómo se lee un objeto creado por la clase ObjectOutputStream utilizando la clase ObjectInputStream.

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 w3codebox";
        try {
            FileOutputStream file = new FileOutputStream("file.txt");
            ObjectOutputStream output = new ObjectOutputStream(file);
            //Escribir en el archivo utilizando ObjectOutputStream
            output.writeInt(data1);
            output.writeObject(data2);
            FileInputStream fileStream = new FileInputStream("file.txt");
            //Crear un flujo de entrada de objetos
            ObjectInputStream objStream = new ObjectInputStream(fileStream);
            //Utilizando el método readInt()
            System.out.println("Datos enteros: " + objStream.readInt());
            //Utilizando el método readObject()
            System.out.println("Datos de cadena: " + objStream.readObject());
            output.close();
            objStream.close();
        }
        catch (Exception e) {
            e.getStackTrace();
        }
    }
}

Resultado de salida

Datos enteros: 5
Datos de cadena: This is w3codebox

En el ejemplo anterior, utilizamos los métodos readInt() y readObject() para leer datos enteros y datos de objetos del archivo.

Aquí, utilizamos ObjectOutputStream para escribir datos en el archivo. Luego, utilizamos ObjectInputStream para leer datos del archivo.

Ejemplo2:Java ObjectInputStream

Veamos otro ejemplo práctico:

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) {
        //Crear un objeto de la clase Dog
        Dog dog = new Dog("Tyson", "Labrador");
        try {
            FileOutputStream file = new FileOutputStream("file.txt");
            //Crear un ObjectOutputStream
            ObjectOutputStream output = new ObjectOutputStream(file);
            //Escribir objeto en el flujo de salida
            output.writeObject(dog);
            FileInputStream fileStream = new FileInputStream("file.txt");
            //Crear un ObjectInputStream
            ObjectInputStream input = new ObjectInputStream(fileStream);
            //Lectura de objeto
            Dog newDog = (Dog) input.readObject();
            System.out.println("Nombre del perro: ", + newDog.name);
            System.out.println("Raza de perro: ", + newDog.breed);
            output.close();
            input.close();
        }
        catch (Exception e) {
            e.getStackTrace();
        }
    }
}

Resultado de salida

Nombre del perro: Tyson
Raza de perro: Labrador

En el ejemplo anterior, creamos

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

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

  • Dog类的对象dog

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

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

ObjectInputStream的其他方法

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