Я пытался выяснить, почему метод, который я написал для чтения объектов из файла, не работал и понял, что метод 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 может. Вам нужно было бы погрузиться в код этих двух классов, чтобы точно понять, что делает их класс доступных(). Но это довольно бесполезно, поскольку доступный() почти никогда не бывает полезен и, конечно же, не в этом случае. –