English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
在本教程中,我们将借助示例学习Java ObjectOutputStream及其方法。
java.io包的ObjectInputStream类可用于读取ObjectOutputStream先前编写的对象。
它进行了InputStream抽象类。
在学习ObjectInputStream类之前,请确保您了解ObjectOutputStream类.
ObjectInputStream主要用于读取ObjectOutputStream写入的数据。
基本上,ObjectOutputStream将Java对象转换为相应的流。这称为序列化。这些转换后的流可以存储在文件中,也可以通过网络传输。
现在,如果需要读取这些对象,则将使用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.
La clase ObjectInputStream proporciona implementaciones de diferentes métodos que existen en la clase InputStream.
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
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.
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只将可序列化的对象写入输出流。
方法 | 内容描述 |
---|---|
available() | 返回输入流中的可用字节数 |
mark() | 标记输入流中已读取数据的位置 |
reset() | 将控件返回到输入流中设置了标记的点 |
skipBytes() | 从输入流中跳过并丢弃指定的字节 |
close() | 关闭对象输入流 |