我一直在試圖弄清楚爲什麼從文件中讀取對象的方法沒有奏效,並意識到available()方法的ObjectInputStream給出了0,即使該文件沒有被完全讀取。 在我使用FileInputStream available()方法來確定EOF並且它工作之後,該方法確實起作用了!ObjectInputStream available()方法不能按預期方式工作(Java)
爲什麼ObjectInputStram方法不能在FileInputStream中工作?
下面的代碼:
public static void getArrFromFile() throws IOException, ClassNotFoundException {
Product p;
FileInputStream in= new FileInputStream(fName);
ObjectInputStream input= new ObjectInputStream(in);
while(in.available()>0){
p=(Product)input.readObject();
if (p.getPrice()>3000)
System.out.println(p);
}
input.close();
P.S- 我讀過,我應該使用EOF異常,而不是可用的()這一點,但我只是想知道爲什麼這是行不通的。
非常感謝!
感謝您的回答,但仍然沒有看到區別。爲什麼ObjectInputStram方法不適用於FileInputStream? – Mapisto
由於某些原因,ObjectInputStream無法保證(或選擇不提供這樣的保證)可以在不阻塞的情況下讀取某些字節,而FileInputStream可以。你將不得不深入這兩個類的代碼來精確地理解他們的可用類()。但這是非常無用的,因爲available()幾乎沒有用處,當然也不是這種情況。 –