将用户数据保存在文本文件或序列化对象中

Posted

技术标签:

【中文标题】将用户数据保存在文本文件或序列化对象中【英文标题】:Save User Data in a Text File or a Serialized Object 【发布时间】:2011-11-11 15:43:21 【问题描述】:

我需要为我正在制作的程序保存书签。书签是 Xposition、Yposition 和缩放。我应该只是读取所有书签并将其写入文本文件,还是应该将它们放入 Bookmarks 对象并对其进行序列化。我感兴趣的是哪一个会被认为是更好的面向对象设计。

【问题讨论】:

【参考方案1】:

我建议保存到跨平台的文本文件。事实上,这不是面向对象的考虑,因为当您使用文本文件方法时,您仍然可以在 oo 中进行编程,例如,具有文本文件源的数据访问对象不会违反 oo 概念。

【讨论】:

【参考方案2】:

java 序列化是脆弱的,所以如果您的意图是长时间保留一些配置数据,这些配置数据可能会存在于您的程序的多个版本中,那么文本文件可能是您最好的选择。

格式完全由你决定,xml、json、csv

如果您决定使用 java 序列化,我建议您将数据存储到 HashMap 中

然后将访问器包裹在地图周围

public class Config 

    private HashMap map; 
    Congif(HashMap map)  this.map = map; 

    <T> T get(Class<T> clazz, String key) 
        return (T) map.get(key);
    

    void put(String key, Serializable value) 
        map.put(key, value);
    
 

【讨论】:

【参考方案3】:

无论如何我都会创建类书签。然后,我将使用方法serialize()deserialize() 创建一个接口BookmarkSerializer。然后我可以创建我的第一个 BookmarkSerializer 实现。例如,它可能基于本机 java 序列化、纯文本、csv、xml 等。所以,我可以选择一个,实现它,然后在我的应用程序中使用它。

当一个实现不能满足我的需求时,我可以添加其他实现。关键是在这种情况下,除了序列化程序本身的初始化之外,我不必更改应用程序中的任何内容。

我认为在您的情况下,您应该从最简单的 CSV 实现开始,如果还不够,请根据需要添加尽可能多的实现。

【讨论】:

我已经创建了书签对象,但我正计划使用 getString() 方法返回要写入文本文件的字符串。似乎它们的工作方式类似,但这样我可以为多个书签创建一个文本文件。【参考方案4】:

使用对象通常是最好的 OO 设计。

为了便于支持,我使用一个文本文件,因为它易于查看(检查是否正确)和编辑(修复它)

【讨论】:

我想我会使用文本文件。精通技术的用户可能也会更喜欢它。谢谢 我的数据文件为 CSV 格式,因此可以在电子表格应用程序中进行编辑。【参考方案5】:

This 可能会回答您的问题。

我建议文本文件为 XML 或 JSON 格式,以便于跨系统兼容。

序列化很棒,但是如果你决定改变你正在序列化的对象,它就会变得很棘手。

如果您决定序列化,请确保为您的对象定义一个SERIAL_VERSION_UID。您可以阅读更多详细信息here。

【讨论】:

以上是关于将用户数据保存在文本文件或序列化对象中的主要内容,如果未能解决你的问题,请参考以下文章

Java:将对象保存在文本文件中?有现成的解决方案吗?

关于PHP文件操作: php保存数据到文本文件,怎么弄?

28 Python - 对象持久化

将 XML 审计数据存储到文件系统或 MS Access 表?

将模型导出到没有列名或标题的文本文件(仅值)

java中如何把输入的数据以json格式保存在文本里面