为什么都使用二进制文件,如果都可以使用 XML ?
9 回答
当然,由于性能的原因,当您必须定义树结构但并非所有类型的数据都适合它时,XML 是很好的。您会将 3d 模型存储在 XML 文件中吗?还是图像?
XML 可以很好地处理文本数据,而有效的二进制数据(如图像、声音、压缩文件等)呢?
解析起来非常冗长且繁重,并且您不想在性能很重要时使用它(例如考虑游戏的网络代码)。
如果我必须读取包含例如矢量或点结构的 XML 文件,我会开枪打死自己。
使用解析器代替将内容转储到内存中,例如:
fread(&myBuf, sizeof(vector_struct), 10, in);
会让我觉得很傻。。
两全其美。将 XSD 绑定与可序列化/反序列化为二进制和 XML 的工具一起使用 - 例如 www.codesynthesis.com XSD。
你见过XML 吗?硬件制造商出售更大的硬盘似乎是一个阴险的计划:-)
但是,抛开幽默不谈,如果出现以下情况,我会选择使用二进制文件:
- 我不太关心将信息提供给外部系统,或移植到其他平台。
- 我想以最大速度读取和写入它(无需解析/生成 XML)。
- 我不需要它可读或容易转换。
- 我正在研究一个 XML 没有意义(嵌入式 C)或 XML 处理库不容易获得的系统。
在许多情况下,XML 将是一个不错的选择,但在某些情况下您需要二进制格式或至少应该考虑它:
- 如果您需要随机访问(并且无法将文件加载到内存中 - 例如数据库)
- 如果文件大小是一个问题(例如图像、电影)
- 如果数据本质上是二进制的(例如图像、声音)
- 如果性能是一个问题(以上所有)
以下不是使用二进制的好理由:
- XML 难以解析(几乎所有可用语言都有优秀的 XML 库)
- 二进制防止用户篡改(它不会,它只会使它更难)
阅读:Joel 谈软件:回归基础。是的,它有很多文字。是的,它似乎与您的问题无关,但不,这对您的问题来说并不是一个糟糕的答案 - 如果我是乔尔,我会在这里引用整篇文章并为此声明一个无数的代表。
这是一个非常闪亮的例子:二进制格式总是对齐的,每个 x..x+y 位代表一组数据。移动到其他组就像获取原始起点和组的索引并将这两个值乘以 ( x*n..(x+y)*n ) 以获得与该组相关的所有数据一样简单。确切地说,您如何使用 XML 做到这一点?
XML 是一个难以解析的地狱。作为一种易于人们编写和程序读取的格式,它实际上是最糟糕的格式之一。
二进制文件还有一个优点,即您可以跳过大部分解析,只需将文件的某些部分视为直接内存转储(如果您愿意,您应该谨慎行事)。
- 更小 --> 更好地传输。
- 根据访问方法,解析速度更快。
- 可读性较差(二进制文件比 XML 文件更难破解)
还有一堆原因。随意添加。
并非每种类型的数据都可以用 xml 表示。并且它可以节省大量空间来以二进制而不是 XML 存储值。如果数据将由 XML 解析器解析,那么它应该存储在 XML 中,否则为什么要浪费空间。
因为解析 XML :
- 需要时间
- 需要大量计算
因此,使用二进制文件对性能更好。
并且 :
- XML 是一种非常冗长的格式:想想所有那些使文件变得更大的标签。
- 将您的数据表示为文本并不总是容易/可能的