目前,我很好奇如何在其他程序员组织的数据纳入文件。任何人都可以推荐任何好文章或书的最佳做法,用于创建文件的结构?

例如,如果已经创建了自己的软件,不管出于什么目的,你离开保存的数据为纯文本,它序列化、编码,以xml,和你为什么这么做?

是否有任何秘密我错过了什么?

有帮助吗?

解决方案

一般来说,至少在开始时,尽可能使用最简单的东西。例如,考虑UNIX,其中大多数配置文件只是以空格分隔的字段,或者是用另一个字符分隔的字段(例如/ etc / passwd,它使用":“分隔符,因为GCOS字段可以包含空格。)

如果您的数据需要更多结构,那么问问自己“我可以轻松使用哪些工具?”例如,Python和Ruby有JSON和YAML。

如果您已经拥有大量基于XML的东西,那么XML基本上是有用的,或者您希望将XML转换为浏览器中的可显示形式。否则,它通常是非常重量级的(代码大小,复杂性),你可以从中得到它。

其他提示

无论哪种格式,你选择的记忆储存某些种类的版本号内的(我敢肯定,你就必须引入一些改变)。

格式在很大程度上取决于应用程序和数量的数据。对于某些应用XML是适当的,对于其他应用固定的尺寸的结构存在的二进制文件都是很好的。

我用的许多不同的格式,根据不同情况,例如:

  • 纯文本文件(分隔)用于储存数据集,用于Matlab和R分析
  • 二进制文件,用于储存固定的尺寸结构(动态型的随机访问得到的困难没有保持独立的阵列的偏移量元素)。一个肯定你有的性能和空间效率(为什么大多数的数据库存储的数据在二元格式?), 但它不是非常好的人类的工作。记住的endianess.
  • XML的通常用于配置的数据,或数据,我想要给其他用户应用程序(随着划).另一边可以写很好的XSLT transformation或消耗的数据在其他方式(当然他们可以做同样的纯文本或二进制数据的格式介绍)

除非您有独特的要求,否则请使用已有成熟库的内容,这样您就可以避免编写自己的解析代码。这意味着XML / JSON等,就像人们所说的那样。

另一个不错的是Google的协议缓冲区( http://code.google.com/p/ protobuf的)。在那里,您编写了一个公共消息定义,协议缓冲区编译器生成了用于为您填写,序列化和反序列化数据的对象。通常格式是二进制的,但您也可以使用它们的TextFormat类来编写类似JSON的纯文本。关于protobufs的好处是为您生成版本控制代码。在文件格式的第2版中,您所要做的就是将字段添加到.proto定义文件中。新版本可以读取旧文件格式,只是将新字段留空。这并不是protobufs的设计目标,但是它们为自定义消息提供了一种简单,高效的二进制文件格式,并为您生成了代码。

另见Facebook的 Thrift ,现在位于Apache孵化器中。

随着岁月的流逝,我发现自己越来越喜欢文字了,除非它完全没有问题。现在CPU足够快,我们可以足够快地解码它。

显然,当你不得不频繁更新大文件中的一小部分信息时,这不是一个选择 - 但很可能描述了一个数据库。

此时需要一个不寻常的情况才能让我选择其中一个以外的其他选项。

+1的XML。有一点开销,但易于解析,读取和调试。如果您使用的是架构,则可以是严格的。使用XSLT轻松转换,非常便携(有线或只是在pendrive中:)

这真的取决于具体情况。你会需要考虑的选项,对解答的各种问题:

  • 有多少数据做你需要的商店?你需要优化用于表示紧凑型?
  • 是的性能读写的关键?你需要优化用于磁盘的访问和低影响的电子监管和deserialisation?
  • 你需要随机访问内的文件?你需要优化结构寻求内的数据?
  • 是这个数据会被用于不同的系统,可能有不同的字符编码?你需要优化用于携带?

数据的性质本身会产生影响。它是一个平面列出的结构?这是一棵树?它是一个循环图?是的记录固定的或可变宽?

一旦这些问题的答案是知道,你可以选择当中你选项,保持尽可能简单。经常流行的选择(XML,CSV,其)会适合你的目的。如果不,那么你就会有开发自己的格式和自己的写作和阅读程序。

有这么多的可能性,但最切实具有可以XML

  • 有体面的XML图书馆的几乎每一个发展平台
  • 大多数平台允许对象图,电子监管与一对夫妇的代码行的,所以XML是无痛的实施
  • 大多数的平台具有在存和/或流的阅读器,因此,可以处理真正大的文件没有太多的存储器的使用
  • 大多数平台提供XSLT tranformer,所以可移动文件,从一种格式到另一个,甚至从XML到非XML
  • 有索引的扩展XML处理真正的文件太大
  • XML文件的验证的格式,然后再尝试去读它
  • XML是能够代表任何简单或复杂的对象
  • 如果你担心文件的大小,只有拉链的最终XML。这种技术用于在微软办公室等
  • XML仍然是人类可读
  • XML是一个共同的标准
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top