📜  JavaFileInputStream和ObjectInputStream的区别(1)

📅  最后修改于: 2023-12-03 14:42:22.066000             🧑  作者: Mango

JavaFileInputStream和ObjectInputStream的区别

在Java中,JavaFileInputStream和ObjectInputStream都是用于读取文件输入流的类。它们有一些不同的特性和用法。下面我们来详细介绍一下它们之间的区别。

JavaFileInputStream

JavaFileInputStream是Java中用于读取二进制文件的类。它继承了InputStream类,提供了一系列的方法用于读取文件中的数据。JavaFileInputStream通常用于读取文本文件、图像文件、音频文件等二进制文件。

下面是一段使用JavaFileInputStream读取文本文件并输出的示例代码:

try {
    FileInputStream fis = new FileInputStream("example.txt");
    int data;
    while ((data = fis.read()) != -1) {
        System.out.print((char)data);
    }
    fis.close();
} catch (IOException e) {
    e.printStackTrace();
}

从上面的示例代码可以看出,使用JavaFileInputStream读取文件需要手动处理读取的数据,可能会比较繁琐。

ObjectInputStream

ObjectInputStream是Java中用于将Java对象序列化后的二进制流还原成Java对象的类。它继承了InputStream类,提供了一些方法用于读取和反序列化Java对象。

下面是一段将Java对象序列化后写入文件,并使用ObjectInputStream读取出来的示例代码:

User user = new User("John", "Doe", 30);
try {
    FileOutputStream fos = new FileOutputStream("user.ser");
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(user);
    oos.close();
    fos.close();

    FileInputStream fis = new FileInputStream("user.ser");
    ObjectInputStream ois = new ObjectInputStream(fis);
    User deserializedUser = (User) ois.readObject();
    ois.close();
    fis.close();

    System.out.println(deserializedUser);
} catch (IOException | ClassNotFoundException e) {
    e.printStackTrace();
}

从上面的示例代码可以看出,使用ObjectInputStream读取序列化后的Java对象,代码变得十分简单。我们不需要手动处理读取的数据,而是直接将读取的数据还原成了我们需要的Java对象。

总结

综上所述,JavaFileInputStream主要用于读取二进制文件,需要手动处理读取到的数据;而ObjectInputStream则用于将Java对象序列化后的二进制流还原成Java对象,代码十分简单。在实际使用中,我们需要根据具体的场景来选择使用哪种方式来读取文件。