java에서 Vector 클래스 설정에 대하여
조회수 2511회
연습문제가 사람의 정보를 받아서 입력하고 데이터에 저장하고 언제든지 볼수있는 프로그램을 만드는건데
Vector vc = new Vector();
if (file.exists()){
ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(file)));
vc = (Vector) ois.readObject();
ois.close();
}
이런식으로 하는데 오류는
Exception in thread "main" java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2335)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2804)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:802)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)
at Ex7.main(Ex7.java:11)
이런식으로 나오네요... 뭐가문제인지 잘 모르겠습니다. 열혈 자바 김승현 저자 책에서 나온 문제인데 소스를 그대로 쳐도 이러네요... 도와주세요!!
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
파일에서 Vector객체를 읽어들이는데 해당 파일에 Vector객체가 없는 경우입니다.
다음 예제를 살펴 보세요. 파일에 Vector를 3개 쓰고, 그 파일에서 ObjectInputStream으로 Vector객체를 3번 읽어오는 예제입니다. 이 코드에서 29~31번째 줄을 지우면 똑같이 EOFException이 발생하네요.
코드 밑에 보면 실행하기 버튼 있으니까 그거 눌러서 나오는 코드 실행기에서 실행해 보세요. 잘 동작할겁니다. 그리고 29~31번째 줄(
oos.writeObject(us1);
라고 적힌 부분)을 지우고 실행해 보세요. 올려주신것과 똑같은 Exception이 발생합니다.import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.Vector; public class ObjectStream { public static void main(String[] args){ // ObjectOutputStream 을 이용한 객체 파일 저장 FileOutputStream fos = null; ObjectOutputStream oos = null; // UserClass 에 이름과 나이를 입력하여 객체를 3개 생성한다. Vector us1 = new Vector(); Vector us2 = new Vector(); Vector us3 = new Vector(); try{ // object.dat 파일의 객체 아웃풋스트림을 생성한다. fos = new FileOutputStream("object.dat"); oos = new ObjectOutputStream(fos); // 해당 파일에 3개의 객체를 순차적으로 쓴다 oos.writeObject(us1); oos.writeObject(us2); oos.writeObject(us3); // object.dat 파일에 3개의 객체 쓰기 완료. System.out.println("객체를 저장했습니다."); }catch(Exception e){ e.printStackTrace(); }finally{ // 스트림을 닫아준다. if(fos != null) try{fos.close();}catch(IOException e){} if(oos != null) try{oos.close();}catch(IOException e){} } // 파일로 부터 객체 데이터 읽어온다. FileInputStream fis = null; ObjectInputStream ois = null; try{ // object.dat 파일로 부터 객체를 읽어오는 스트림을 생성한다. fis = new FileInputStream("object.dat"); ois = new ObjectInputStream(fis); // ObjectInputStream으로 부터 객체 하나씩 읽어서 출력한다. // (UserClass) 로 형변환을 작성해야 한다. // System.out.println 으로 객체의 구현된 toString() 함수를 호출한다. System.out.println( (Vector)ois.readObject()); System.out.println( (Vector)ois.readObject()); System.out.println( (Vector)ois.readObject()); }catch(Exception e){ e.printStackTrace(); }finally{ // 스트림을 닫아준다. if(fis != null) try{fis.close();}catch(IOException e){} if(ois != null) try{ois.close();}catch(IOException e){} } } }
댓글 입력