繁体   English   中英

压缩XML的最佳方法

[英]The best way to Compress XML

我需要将一个非常大的xml文件压缩到尽可能小的大小。

我在C#工作,我更喜欢它是一些我可以通过我的代码访问的开源或应用程序,但我也可以处理一个算法。

谢谢!

它可能不是“可能的最小尺寸”,但您可以使用System.IO.Compression来压缩它。 压缩倾向于为文本提供非常好的压缩。

using (var fileStream = File.OpenWrite(...))
using (var zipStream = new GZipStream(fileStream, CompressionMode.Compress))
{
    zipStream.Write(...);
}

如上所述,高效XML交换(EXI)可以非常一致地实现最佳的XML压缩。 即使没有架构,EXI也比拉链小2-5倍并不少见。 使用模式,你会做得更好。

如果您不反对商业实现,则可以使用.NET版本的Efficient XML,并使用标准.NET API直接从C#代码中调用它。 您可以从http://www.agiledelta.com/efx_download.html下载免费试用版。

如果您有可用于XML文件的架构,则可以尝试EXIficient 它是高效XML交换 (EXI)格式的一种实现,它几乎是最好的通用XML压缩方法。 如果你没有架构,EXI仍然比常规zip(deflate算法)更好,但不是很多,特别是对于大文件。

EXIficient只是Java,但你可以把它变成你可以调用的应用程序。 我不知道在C#中有任何EXI的开源实现。

看看XML压缩工具,你也可以使用SharpZipLib压缩它

文件大小不是EXI(或任何二进制方案)的唯一优势。 在读/写时,处理时间和内存开销也大大降低。 想象一下,只需复制字节就可以将浮点数复制到磁盘上。 现在假设另一个程序将浮点数转换为格式化文本,并将它们粘贴到文本流中,然后通过昂贵的压缩算法提供该流。 由于这种荒谬的开销,XML基本上不能用于非常大的文件,这些文件本可以通过二进制表示轻松处理。

二进制XML有望解决XML长期存在的弱点。 制作一个在二进制/文本表示之间进行转换的实用程序(不知道XML模式)非常容易,这意味着您仍然可以在需要时轻松编辑文件。

XML具有高度可压缩性。 您可以使用DotNetZip从XML生成压缩的zip文件。

如果您需要最大压缩等级,我会推荐LZMA。 有一个SDK(包括C#)是开源7-Zip项目的一部分,可在此处获得

如果您正在寻找尽可能小的尺寸,请尝试使用Fast Infoset作为二进制XML编码,然后使用BZIP2或LZMA进行压缩。 您可能会比压缩文本XML或使用EXI获得更好的结果。 FastInfoset.NET包括Fast Infoset标准的实现和几种压缩格式可供选择,但它是商业的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM