Java 中 FileInputStream 和 ObjectInputStream 的区别
在 Java 中处理文件时,可以使用不同的类来读取文件中的信息。两个常用的类是 FileInputStream 和 ObjectInputStream。虽然这两个类都用于从文件中读取信息,但它们在方法和功能上有所不同。在本文中,我们将探讨 FileInputStream 和 ObjectInputStream 之间的区别,并了解何时使用它们。
语法
在深入了解差异之前,让我们先了解 FileInputStream 和 ObjectInputStream 的语法:
FileInputStream 语法
FileInputStream fis = new FileInputStream("file.txt");
ObjectInputStream 语法
FileInputStream fis = new FileInputStream("file.txt"); ObjectInputStream ois = new ObjectInputStream(fis);
语法解释
FileInputStream 类能够从文件中读取原始字节。它接受文件名或文件描述符作为参数,并打开一个用于读取的流。另一方面,ObjectInputStream 是一个更高级别的类,它扩展了 FileInputStream。它提供了额外的功能,可以从文件中读取序列化对象。要使用 ObjectInputStream,我们首先需要创建一个 FileInputStream 实例,然后将其作为参数传递给 ObjectInputStream 构造函数。
方法 1:FileInputStream
FileInputStream 类在字节级别工作,主要用于从文件中读取原始数据。它提供了一个可以连续读取的字节流。让我们详细了解该方法:
算法
通过提供文件名或文件描述符创建 FileInputStream 实例。
创建一个缓冲区或字节数组来存储从文件中读取的数据。
使用 FileInputStream 的 read() 方法将文件中的数据读取到缓冲区中。
根据需要处理缓冲区中的数据。
示例
import java.io.FileInputStream; import java.io.IOException; public class FileInputStreamExample { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("file.txt"); byte[] buffer = new byte[1024]; int bytesRead = fis.read(buffer); while (bytesRead != -1) { // Process the data from the buffer System.out.println(new String(buffer, 0, bytesRead)); bytesRead = fis.read(buffer); } fis.close(); } catch (IOException e) { e.printStackTrace(); } } }
输出
This is an example text file. It contains some sample data to demonstrate the usage of FileInputStream.
在此代码示例中,我们使用文件名“file.txt”创建了一个 FileInputStream 实例。我们还创建了一个名为“buffer”的字节数组来存储从文件中读取的数据。在 while 循环中,我们使用 FileInputStream 的 read() 方法将文件中的数据读取到缓冲区中。然后,我们处理缓冲区中的数据,在本例中,只是将其打印到控制台。循环持续进行,直到 read() 方法返回 -1,表示文件结束。最后,我们关闭 FileInputStream 以释放系统资源。
方法 2:ObjectInputStream
ObjectInputStream 类用于从文件中读取序列化对象。它提供了更高级别的功能来处理对象序列化和反序列化。让我们探索该方法:
算法
通过提供文件名或文件描述符创建 FileInputStream 实例。
通过将 FileInputStream 实例作为参数创建 ObjectInputStream 实例。
使用 ObjectInputStream 的 readObject() 方法从文件中读取序列化对象。
根据需要处理对象。
示例
import java.io.FileInputStream; import java.io.IOException; import java.io.ObjectInputStream; public class ObjectInputStreamExample { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("file.ser"); ObjectInputStream ois = new ObjectInputStream(fis); Object obj = ois.readObject(); // Process the object as required System.out.println(obj.toString()); ois.close(); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } }
输出
This is an example text file. It contains some sample data to demonstrate the use of FileInputStream.
在此代码示例中,我们使用文件名“file.txt”创建了一个 FileInputStream 实例。然后,我们通过将 FileInputStream 实例作为参数创建了一个 ObjectInputStream 实例。使用 ObjectInputStream 的 readObject() 方法,我们从文件中读取了序列化对象。然后,我们可以根据需要处理该对象。在本例中,我们只是使用 toString() 方法将对象打印到控制台。最后,我们关闭 ObjectInputStream 以释放系统资源。
Java 中 FileInputStream 和 ObjectInputStream 的区别
区别 |
FileInputStream |
ObjectInputStream |
---|---|---|
用途 |
用于从文件中读取原始字节。 |
用于从文件中读取序列化对象。 |
流类型 |
在字节级别操作,提供一个字节流。 |
扩展 FileInputStream 的更高级别类。 |
数据处理 |
需要额外的处理才能将字节转换为所需的数据类型。 |
自动处理对象序列化和反序列化。 |
与非序列化数据的使用 |
适用于从文件中读取任何类型的数据。 |
不适合读取非序列化数据。 |
依赖项 |
直接依赖于 FileInputStream 类。 |
扩展 FileInputStream 类以获得额外的功能。 |
结论
总而言之,Java 中的 FileInputStream 和 ObjectInputStream 类提供了不同的方法来从文件中读取信息。FileInputStream 用于读取原始字节,而 ObjectInputStream 用于读取序列化对象。了解这些类之间的区别及其特定的用例对于在 Java 中有效地进行文件处理至关重要。通过根据您的需求使用合适的类,您可以成功地读取和处理 Java 应用程序中的文件数据。