FileInputStream and ObjectInputStream

4

我需要使用这些类来读取一个文件。但是我并不是很明白它们的工作原理。

FileInputStream inFile = new FileInputStream(fileName);
ObjectInputStream inStream = new ObjectInputStream(inFile);
car = (Car)inStream.readObject();

如果car是一个类,究竟在读什么?我对此感到很困惑。
car是类Car的一个实例。
谢谢。
3个回答

2
在最基本的层面上,您正在从文件中读取位,而FileInputStream可以完成此操作。然后通过ObjectInputStream进行过滤,将这些位转换为Java对象,但不知道所创建的对象的实际类型,因此必须将对象强制转换为Car(希望在try / catch块中进行以防出现错误)。
有关流的更多信息,请参见此处:输入流
有关文件输入流的更多信息,请参见此处:字节流
有关对象流的更多信息,请参见此处:对象流

是的,在 try-catch 块里我搞定了。现在我已经明白了,因此它会以程序可以理解的方式保存到那个文件中,可以读取回来对象!不错! - sark9012
很高兴你正在逐渐掌握它!继续努力! - Hovercraft Full Of Eels
我就是理解不了。我坐在这里试图理解正在保存的内容。它会变成一个 .dat 文件吗? - sark9012
我不知道扩展名是否重要,甚至是否有意义,因为您可以选择任何扩展名。但底线是它是一个二进制文件,毫无疑问,通常从文本角度来看是不可读的。 - Hovercraft Full Of Eels

0

你的代码尝试将已保存到文件流中的对象进行反序列化。

当你的虚拟机关闭时,你的对象实例将会消失。序列化是一种将对象保存到持久性存储(文件、数据库)的方法,因此该对象可以在虚拟机生命周期之外被使用。如果需要再次使用该对象,只需将数据流反序列化为对象即可。

有关序列化的更多信息,请参阅此链接:

http://java.sun.com/developer/technicalArticles/Programming/serialization/


0

FileInputStream:
FileInputStream 用于打开文件以进行读取。

FileInputStream fis=new FileInputStream("welcome");

它检查文件是否存在,如果文件存在,则打开文件进行读取,否则将抛出FileNotFoundException异常。

ObjectInputStream:

FileInputStream fis=new FileInputStream("welcome");
ObjectInputStream ois=new ObjectInputStream(fis);

它打开文件以读取对象。


一个包含大量对象的文件,可以使用FileInputStream进行加载。如何使用ObjectInputStream顺序读取它们呢? - Lucas Sousa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接