将用户数据保存在文本文件或序列化对象中
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。
【讨论】:
以上是关于将用户数据保存在文本文件或序列化对象中的主要内容,如果未能解决你的问题,请参考以下文章