📅  最后修改于: 2023-12-03 14:42:22.066000             🧑  作者: Mango
在Java中,JavaFileInputStream和ObjectInputStream都是用于读取文件输入流的类。它们有一些不同的特性和用法。下面我们来详细介绍一下它们之间的区别。
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是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对象,代码十分简单。在实际使用中,我们需要根据具体的场景来选择使用哪种方式来读取文件。