将序列化对象写入文件中?

时间:2014-08-16 21:15:41

标签: java file

try
        {
            File dataFile = new File("C:/Users/keatit/Desktop/players.txt");
            if(!dataFile.exists())
            {
                dataFile.createNewFile();
            }

            FileOutputStream fos = new FileOutputStream("C:/Users/keatit/Desktop/players.txt");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(players);
            oos.close();
        }
        catch(FileNotFoundException fnfex)
        {
            System.out.println(fnfex.getMessage());
        }
        catch(IOException ioex)
        {
            System.out.println(ioex.getMessage());
        }

我有一个实现Serializable的类播放器,但是当我向文件写入对象时,文本被搞砸了,如下所示。任何帮助将非常感激。谢谢。

“¬íssrjava.util.ArrayListxÒ™ÇaIsizexp wsrplars.playerÌ`~%×êòœIageL firstNamet Ljava / lang / String; xp t Trevorsq~t Michaelax”

1 个答案:

答案 0 :(得分:5)

这是二进制序列化。它并不意味着写入人类可读的文本文件。为此,您应该查看类似JSON或YAML的内容。我强烈建议反对使用.txt写入ObjectOutputStream文件 - 这会给人留下错误的印象。

二进制序列化的目的是能够在稍后使用相同的序列化协议对其进行反序列化 - 因此在这种情况下,您使用ObjectInputStream。您应该会发现能够正确反序列化存储在文件中的对象。

(旁注:FileOutputStream会自动创建一个新文件,如果它不存在 - 您自己也不需要这样做。此外,您应该尝试使用 - 资源语句自动清理,而不是仅在close()块之外调用finally。)