파일에서 객체를 읽도록 작성한 메서드가 작동하지 않아서 available() 메서드가 작동하지 않는 이유를 알아 내려고 노력했습니다. 파일이 완전하게 읽히지 않았더라도 ObjectInputStream의 0으로 설정되었습니다. 대신에 FileInputStream available() 메서드를 사용하여 EOF를 확인한 후에이 메서드가 작동했습니다.ObjectInputStream available() 메서드가 예상대로 작동하지 않음 (Java)
FileInputStream에서 작동하는 동안 ObjectInputStram에 대한 메서드가 작동하지 않는 이유는 무엇입니까?
여기에 코드입니다 :
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 예외를 사용해야합니다 읽었습니다,하지만이 작동하지 않는 이유를 난 그냥 알고 싶어요.
감사합니다.
답변을 주셔서 감사합니다.하지만 여전히 차이는 없습니다. 이 FileInputStream에 대한 ObjectInputStram에없는 방법 일을 왜 작동 않습니다 동안? – Mapisto
어떤 이유로, ObjectInputStream은 블록하지 않고 일부 바이트를 읽을 수 있다고 보장 할 수 없으며 (또는 그러한 보증을 제공하지 않기 때문에), FileInputStream은 차단할 수 있습니다. 사용 가능한() 클래스가 무엇을하는지 정확히 이해하려면이 두 클래스의 코드를 살펴 봐야합니다.()을 사용할 수는 거의 절대 유용하고 확실히이 경우는 없기 때문에 그러나 이것은 꽤 쓸모가 없다. –