DataInputStream和DataOutputStream

-2 java dataoutputstream java-io datainputstream

我制作了自己的缓冲式打字机.但我不知道它是否确实如此?

当我退出时,我做了一个缓冲读取器(200个硬币),当我登录时,我得到(545453个硬币)或其他金额,我确信它是缓冲区的,请帮助!

public static int coins;
private static final String DIR = "./Data/";
    public static boolean SavePlayer;

    public static void saveAll() {
        SavePlayer = true;
        if (!SavePlayer) {
            System.out.println("[WoG Error]: Their was an error saving players.");
            return;
        }
        saveGame();
    }

    public static boolean saveGame() {
        if (Player.playerName == null) {
            return false;
        }
        try {
            File file = new File(DIR + Player.playerName.toLowerCase() + ".dat");
            if (!file.exists()) 
                file.createNewFile();
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            DataOutputStream o = new DataOutputStream(fileOutputStream);
            o.writeUTF(Player.playerName);
            o.writeInt(Player.coins);
            //o.writeInt(Player.height);
            o.close();
            fileOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    public static boolean loadGame() throws InterruptedException {
        try {
            File file = new File(DIR + Player.playerName.toLowerCase() + ".dat");
            if (!file.exists()) {
                System.out.println("[WoG Error] Sorry but the account does not exist.");
                return false;
            }
            FileInputStream fileInputStream = new FileInputStream(file);
            DataInputStream l = new DataInputStream(fileInputStream);
            Player.playerName = l.toString();
            Player.coins = l.readInt();
            //Player.height = l.readInt();
            l.close();
            fileInputStream.close();
            Player.home();
        } catch (final IOException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
Run Code Online (Sandbox Code Playgroud)

}

如何正确保存所有(整数)?

Ste*_*art 5

从这3行开始,看起来你正在保存玩家的名字,然后是硬币计数......

DataOutputStream o = new DataOutputStream(fileOutputStream);
o.writeUTF(Player.playerName); 
o.writeInt(Player.coins);
Run Code Online (Sandbox Code Playgroud)

然后尝试再次阅读它们,如下所示:

DataInputStream l = new DataInputStream(fileInputStream);
Player.playerName = l.toString(); // <-- change to l.readUTF()
Player.coins = l.readInt();
Run Code Online (Sandbox Code Playgroud)

我注意到你正在使用l.toString()而不是l.readUTF().

当然你需要使用相应的方法读回数据以保存它吗?

换句话说,如果您保存数据,则o.writeUTF()需要使用回读数据l.readUTF().

喜欢喜欢.

  • 你完全错过了我的观点.你使用`o.writeUTF()`保存了.你应该用`l.readUTF()回读.没有`o.fromString()`对应于`l.toString()` (2认同)
  • 注意:StackOverflow不是讨论论坛.对答案的评论不适合讨论您的代码. (2认同)