2014-11-26 3 views
0

JAVA 프로그램의 데이터를 .db 파일에 저장하려고하는데 작동하지 않습니다. 다음과 같은 메시지 오류가 나타납니다.db 파일에 데이터 저장 - java.io.File

"java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source) at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source) at java.io.ObjectInputStream.readStreamHeader(Unknown Source) at java.io.ObjectInputStream.<init>(Unknown Source) at server.server.main(server.java:27) Running"

내 프로그램은 자바 RMI와 함께 작동하는 클라이언트 - 서버 모델입니다. 2 클라이언트, 2 인터페이스 및 다음 서버 클래스 및 모든 메서드를 사용하여 구현 클래스를 포함하여 여러 클래스가 있습니다. 서버 클래스에서

public void save() { 
    ObjectOutputStream out; 
    try { 
     out = new ObjectOutputStream(new FileOutputStream(new java.io.File("C:/Users/Myself/Desktop/Hospital.db"))); 
     out.writeObject(this); 
     out.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    }  
} 

:

try { 
     ObjectInputStream in; 
     try {    
      in = new ObjectInputStream(new FileInputStream(new java.io.File("C:/Users/Myself/Desktop/Hospital.db"))); 
      read = (implementation)in.readObject(); 
      in.close(); 
      System.out.println(read); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      read = new implementation(); 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      read = new implementation(); 
      e.printStackTrace(); 
     } catch (ClassNotFoundException e) { 
      // TODO Auto-generated catch block 
      read = new implementation(); 
      e.printStackTrace(); 
     } 

이 방법은 다음 두 클라이언트에서 사용되는 "저장"을 다음과 같이

"저장"방법은 구현 클래스입니다.

+1

까지 내가 볼 수있는 _reading_ 파일이 아닌 _writing_ – AlexR

+1

클라이언트가 파일 쓰기를 완료하기 전에 서버가 파일을 읽는 중일 수 있습니다. –

답변

0

을 시도하는 동안 예외 스택 추적에 파일의 enf가 표시되어 개체 스트림 헤더를 읽습니다. 이로부터 우리는 몇 가지를 확인할 수 있습니다 파일 C:/Users/Myself/Desktop/Hospital.db에서 객체를 읽는 동안

  • 문제가 발생합니다. 문제 설명이 객체를 쓰는 동안 발생하지 않습니다.
  • 은 스트림이 헤더를 읽으려고한다는 것을 보여 주므로 파일의 시작 부분에서 발생합니다. 스트림 헤더는 일반적으로 2 개의 short 값인 AC ED00 05으로 구성되며, 스트림의 처음 4 바이트는
  • 입니다. 스트림 헤더를 읽을 수 있기 전에 EOFException이 발생한다는 사실은 스트림의 바이트 수가 4 바이트 미만임을 의미합니다. 나는 그것이 비어 있다고 내기 할 것이다. 왜 비어 있니? 코드를 더 이상 보지 않고서는 알 수 없습니다.

즉, 간단히 말해서 : 코드가 빈 파일에서 객체를 직렬화 해제하려고 시도하고 있으므로 예외가 발생합니다.

+0

대단히 고마워요! 지금은 이해 – Zombie