我目前对其他程序员如何将数据组织到文件中非常好奇。 任何人都可以推荐任何关于创建文件结构的最佳实践的好文章或书籍吗?
例如,如果您出于任何目的创建了自己的软件,是否将保存的数据保留为纯文本,序列化,编码为xml,以及为什么要这样做?
我错过了什么秘密?
答案 0 :(得分:7)
一般来说,至少在开始时,尽可能使用最简单的东西。例如,考虑UNIX,其中大多数配置文件只是以空格分隔的字段,或者是用另一个字符分隔的字段(例如/ etc / passwd,它使用“:”分隔符,因为GCOS字段可以包含空格。)
如果您的数据需要更多结构,那么问问自己“我可以轻松使用哪些工具?”例如,Python和Ruby有JSON和YAML。
如果您已经拥有大量基于XML的东西,那么XML基本上是有用的,或者您希望将XML转换为浏览器中的可显示形式。否则,它通常是非常重量级的(代码大小,复杂性),你可以从中得到它。
答案 1 :(得分:5)
无论您选择哪种格式,请记住在其中存储某种版本号(我很确定您必须引入一些更改)。
格式在很大程度上取决于应用程序和数据量。对于某些应用程序,XML是合适的,对于其他应用程序,存储在二进制文件中的固定大小的结构是好的。
我根据情况使用许多不同的格式,例如:
答案 2 :(得分:2)
除非您有独特的要求,否则请使用已有成熟库的内容,这样您就可以避免编写自己的解析代码。这意味着XML / JSON等,就像人们所说的那样。
另一个不错的是Google的协议缓冲区(http://code.google.com/p/protobuf)。在那里,您编写了一个公共消息定义,协议缓冲区编译器生成了用于为您填写,序列化和反序列化数据的对象。通常格式是二进制的,但您也可以使用它们的TextFormat类来编写类似JSON的纯文本。关于protobufs的好处是为您生成版本控制代码。在文件格式的第2版中,您所要做的就是将字段添加到.proto定义文件中。新版本可以读取旧文件格式,只留下新字段。这并不是protobufs的设计目标,但它们为自定义消息提供了一种简单,高效的二进制文件格式,并为您生成了代码。
另见Facebook的Thrift,现在在Apache孵化器中。
答案 3 :(得分:1)
随着岁月的流逝,我发现自己越来越喜欢文字了,除非它完全没有问题。现在CPU足够快,我们可以足够快地解码它。
显然,当你不得不频繁更新大文件中的一小部分信息时,这不是一个选择 - 但很可能描述了一个数据库。
此时需要一个不寻常的情况才能让我选择其中一个以外的其他选项。
答案 4 :(得分:1)
+1的XML。有一点开销,但易于解析,读取和调试。如果您使用的是架构,则可以是严格的。使用XSLT轻松转换,非常便携(有线或只是在pendrive中:)
答案 5 :(得分:1)
这实际上取决于具体情况。您需要根据各种问题的答案考虑您的选择:
数据本身的性质会产生影响。它是一个扁平列表结构吗?它是树吗?它是一个循环图吗?是固定宽度还是可变宽度的记录?
一旦知道了这些问题的答案,您就可以在选项中进行选择,尽可能保持简单。通常流行的选项(XML,CSV,YAML)将适合您的目的。如果没有,那么你将不得不开发自己的格式和自己的写作和阅读程序。
答案 6 :(得分:0)
有很多可能性,但最实用的必须是XML