2013-04-05 2 views
0

Я пытаюсь создать состояния сохранения для своей игры, а не столько, где была оставлена ​​ваша игра, но что-то простое, как табло. Формат будет что-то вроде этого:Как сохранить состояния в файле и сохранить файл в безопасности?

Wins: 5 
Losses: 10 
GamesPlayed: 15 

Мне нужно, чтобы иметь возможность получить доступ к файлу, и в зависимости от того, выиграл игрок/потерял это добавит +1 к значению в файле.

Что было бы лучшим способом сделать это? Я слышал о множестве различных способов сохранения данных, например XML, но разве это не слишком важно для размера моих данных?

Кроме того, я хочу сохранить этот файл safe от пользователей, которые могут войти в файлы и изменить данные. Должен ли я сделать какое-то шифрование? И, если пользователь удаляет файл и заменяет его пустым, они не могут технически сбросить свои значения?

+0

Просто используйте «сериализацию». –

+0

Да! Если они могут получить доступ к файлу, они технически сбросят свою историю табло. Но, как отметил @LuiggiMendoza, «Serialization» будет делать трюк для всех ваших других требований. – SudoRahul

+0

Я предлагаю использовать файл свойств с зашифрованными значениями. – Manish

ответ

3

Для этого можно использовать обычную сериализацию/десериализацию. Чтобы сериализовать/десериализовать класс, он должен реализовать интерфейс 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 :) –

Смежные вопросы