Xml 为什么固定宽度文件格式仍在使用?

Xml 为什么固定宽度文件格式仍在使用?,xml,fixed-width,Xml,Fixed Width,与XML之类的东西相比,固定宽度的文件格式有什么优势吗?我意识到XML可能会占用更多的磁盘空间来存储相同数量的数据,但文件也可能被压缩。理论上,我想你也可以根据数据在文件中的位置来读取特定的数据(只需抓取这些字节)。但除此之外,还有什么呢?一个原因可能是处理XML(不仅仅是读取和加载到内存结构中,而是考虑在XML文件中搜索正则表达式,而不是简单的固定宽度或分隔文件,甚至手动快速修复坏数据)比固定宽度文件更复杂。当然,现在有很多库可以为您完成这项工作,但是如果您正在使用的平台没有库,那么您真的想编

与XML之类的东西相比,固定宽度的文件格式有什么优势吗?我意识到XML可能会占用更多的磁盘空间来存储相同数量的数据,但文件也可能被压缩。理论上,我想你也可以根据数据在文件中的位置来读取特定的数据(只需抓取这些字节)。但除此之外,还有什么呢?

一个原因可能是处理XML(不仅仅是读取和加载到内存结构中,而是考虑在XML文件中搜索正则表达式,而不是简单的固定宽度或分隔文件,甚至手动快速修复坏数据)比固定宽度文件更复杂。当然,现在有很多库可以为您完成这项工作,但是如果您正在使用的平台没有库,那么您真的想编写一个XML解析器,还是一个只在位置x读取n个字节的程序

可能主要是由于遗留原因,因为XML、JSON(等)的解析器几乎存在于所有平台上

正如您所建议的,理论上固定宽度格式可以更节省空间;阅读也简单一点。但这些似乎并没有显著的好处


值得一提的是,像CSV这样的表格格式(但不是固定宽度)有其用途,结合了更紧凑的表示和可能更好的可读性;CSV对于map/reduce样式的作业非常有效。

XML非常复杂。尤其是如果您根据模式进行验证。这看起来可能并不重要,因为其他人已经编写了您可以使用的XML解析器。但这增加了相当多的处理,这意味着需要更长的时间。在许多情况下,这可能不是问题,但有时会

如果要将一个整数保存为自定义文件格式,只需4个字节,当您要加载它时,只需将这4个字节复制到内存中(假设文件格式和平台具有相同的endianness)。但是对于XML,它可能需要大约10–30个字节。加载它意味着比较字符串和解析整数的十进制表示,甚至可能更多

再次,这些性能和存储大小的差异可能太小,甚至无法考虑(并且设计定制格式所需的工作可能是不平凡的),但在许多情况下,这些差异确实很重要。 例如,我遇到一个使用SMS消息传输某些数据的系统。这意味着每条消息有140字节(!)。发送和接收这些消息的设备没有GB的内存和GHz的CPU。在这种情况下,您要确保每一位都是有意义的,而且您肯定不会使用XML。

当数据较大(千兆/兆字节)时,固定宽度格式文件的效率会大大提高

因为每个记录和字段都有固定的大小,所以您可以简单地查找(例如)第n百万行并从那里读取几条记录。您还可以将整个文件映射到内存中,从而获得对所有内容的高效、轻松的随机访问


XML文件不适合这些情况。

我也有同样的问题,直到我意识到固定宽度的威力。我们有一个表,其中有数百万条记录,当JSON将文件大小增加到15GB和2个多小时时,将它们提取到一个文件中。在使用fixed Widt时,它将容量降低到6.5GB和15分钟

提取和写入固定宽度比JSON更快


我也尝试了CSV,即使在这里,固定宽度的评分也更好。

我知道这很旧,但我每天都处理固定宽度和XML。你几乎可以把它归结为:

XML=可读性

固定宽度=速度和低资源消耗

XML在很大程度上是为了人类的可读性。我不在乎别人怎么说结构和验证。如果您运行的系统确实不需要而且应该让人读取您来回传递的文件,那么您实际上只是将此作为开销添加到处理文件所需的时间和文件大小中,影响文件传输内容所需的时间以及对处理的另一个影响。所有这些还将影响使用XML文件的系统的内存使用。 然而,XML有很多优点。您可以更宽松地定义您的结构。有时,如果文件和代码都不要求字段长度为255个字符,则更容易实现。只有您的代码加载了该限制期。 另一个优点是XML可以/应该附带定义XML内容需求的XML模式。这有助于使用单个API的多个系统。如果您可以向开发人员提供您的模式,他们可以非常快速地创建类型化对象,并将其序列化为正确的格式化和结构化XML

固定宽度是为了速度和最小的资源消耗。它的设置可能比XML更繁琐。确保所有系统都知道固定宽度文件中“列”的确切位置。通常并非所有系统都使用相同或所有列,因此最终只有一个系统完全理解固定宽度的内容。这可能会使利用传输的文件内容开发API或系统变得具有挑战性。但是,因为没有字段标签、标签,只有原始数据,所以通常可以通过网络发送较小的包。并非总是如此,在某些情况下,您可能有大量的文本字段,这些字段中存储了少量数据,但在输入段落长度的一次性情况下,必须保留较大的列宽。现在,在固定宽度的文件中有一堆空白位置,XML实际上可能会减小整个包的大小

但一般来说,XML是为了可读性。通常情况下,您不能只拿起一个固定宽度的文件,甚至是一个CSV文件,然后立即开始理解数据的含义。除了标签良好的XML文件之外,您还可以使用

这里有很多