2013-04-05 3 views
0

내 게임의 저장 상태를 만들려고합니다. 게임이 남아있는 곳이 아닌 스코어 보드와 같은 간단한 것입니다. 형식은 다음과 같이 될 것이다 : 나는 파일에 액세스 할 수 있어야합니다상태를 파일로 저장하고 파일을 안전하게 유지하려면 어떻게해야합니까?

Wins: 5 
Losses: 10 
GamesPlayed: 15 

, 플레이어가 승리 여부에 따라 /이 파일의 값에 +1을 추가합니다 잃었다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 데이터를 저장하는 여러 가지 방법, 예를 들어 XML에 대해 들어 봤지만 데이터 크기가 과도하지 않은가?

또한, 나는 파일로 이동 한 데이터를 변경 할 수있는 사용자에서이 파일 safe을 유지하려는 않습니다. 내가 일종의 암호화를해야할까요? 그리고 사용자가 파일을 제거하고 빈 파일로 대체하면 기술적으로 값을 재설정 할 수 없습니까?

+0

일반 '직렬화'만 사용하십시오. –

+0

예! 파일을 손에 넣을 수 있다면 기술 점수로 기록을 재설정 할 수 있습니다. 그러나 @LuiggiMendoza가 언급했듯이,'직렬화 (Serialization) '는 당신의 다른 모든 요구 사항에 대한 트릭을 수행 할 것입니다. – SudoRahul

+0

암호화 된 값이있는 속성 파일을 사용하는 것이 좋습니다. – Manish

답변

3

일반 직렬화/직렬화를 사용할 수 있습니다. 클래스를 serialize/deserialize하기 위해서는 Serializable 인터페이스를 구현해야합니다. 다음과 같이 시작하는 예가 있습니다 :

public class Score implements Serializable { 
    private int wins; 
    private int loses; 
    private int gamesPlayed; 
    //constructor, getter and setters... 
} 

public class ScoreDataHandler { 

    private static final String fileName = "score.dat"; 
    public void saveScore(Score score) { 
     ObjectOutputStreamout = null; 
     try { 
      out = new ObjectOutputStream(new FileOutputStream(fileName)); 
      out.writeObject(score); 
     } catch (Exception e) { 
      //handle your exceptions... 
     } finally { 
      if (out != null) { 
       try { 
        out.close(); 
       } catch (IOException ioe) { 
       } 
      } 
     } 
    } 

    public Score loadScore() { 
     ObjectInputStreamin = null; 
     Score score = null; 
     try { 
      in = new ObjectInputStream(new FileInputStream(fileName)); 
      score = (Score)in.readObject(); 
     } catch (Exception e) { 
      //handle your exceptions... 
     } finally { 
      if (in != null) { 
       try { 
        in.close(); 
       } catch (IOException ioe) { 
       } 
      } 
     } 
     return score; 
    } 
} 
+0

고마워, 너 큰 도움이야. 한 가지 질문이 있지만, 점수를 저장하고 그것을 읽을 수 없게 만들고 반대를 비 직렬화하는 것입니다. –

+0

@DanielContreras de nada :) –

관련 문제