问题标签 [binary-diff]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2024 浏览

patch - 为什么 bsdiff.exe 对这个较小的文件有问题?

我正在使用 bsdiff.exe 构建软件补丁并将其与 bspatch.exe 一起应用,到目前为止,对于小于 120MB 的文件没有任何问题。我拥有的一个二进制文件以前是 21MB,现在是 77MB,而且 bsdiff 似乎无限期地挂在上面。

根据文档,“bsdiff 非常消耗内存。它需要 max(17*n,9*n+m)+O(1) 字节的内存,其中 n 是旧文件的大小,m 是大小的新文件。” 这解释了大文件的问题,但是当增量较大时,问题似乎发生了。

有没有人有这方面的信息?任何事情都会有帮助,谢谢!

0 投票
1 回答
309 浏览

cross-platform - 具有许可许可证的大文件二进制差异

我正在寻找一个本机库或者可能是相对简单的算法来为最大 1GB 的文件创建和应用二进制补丁。这些是二进制数据库导出,不幸的是没有其他方法可以仅获取更改。补丁不需要非常小;更重要的是速度和空间效率(否bsdiff)。这些文件通常只有不到 1% 的变化,而我已经对 10 倍大的补丁感到满意。

当然,关于这个问题已经有很多问题了,但我目前最大的限制是我需要它是具有许可许可证的开源软件(没有 GPL 风格)。出于这个原因,即使我对它的特性非常满意xdelta3,也不是一个选择,也不是rdiff

我发现一种相当有效的方法是不导出,而是获取数据库文件本身并将其拆分为块。然后,只有不到 20% 的人在两个版本之间进行更改。不幸的是,备份必须与在线数据库一起进行,这将我与导出联系在一起。然后它不再那么好用了。

0 投票
1 回答
2271 浏览

git - Git和二进制数据,最佳存储方式

我处于不得不在 git 中存储一些二进制文件的不幸情况,

但是我可以选择数据在磁盘上的存储方式——在 Git 中(以我们自己的格式,只有构建系统需要读取)。

我想避免过多地谈论细节,因为我认为它不那么重要 - 但为了提供一些上下文,这些是许多图标文件,但同样的问题也适用于许多小型声音文件或 3d 模型。

将这些文件转换为一个大图像将是一个构建步骤,因此可以将图像存储在 git 中。

  • 二进制压缩(例如,PNG(图像)、FLAC(声音))
  • 二进制未压缩(例如,PPM(图像)、未压缩 WAV(声音))
  • 二进制数据的 ASCII 表示(例如,mime 编码、XPM(图像))

让我们假设某些文件偶尔会发生变化——因此避免为像素的每一个小变化存储一个新的二进制 blob——会很好。

我有兴趣知道:

  • 每次二进制文件更改(甚至几个字节)时,哪些选项将存储一个全新的二进制 blob。
  • git diff 未压缩二进制数据是否比压缩数据更好(即使对未压缩数据进行少量编辑,也可能会发生很大变化)。
  • 与一个大型二进制文件相比,我会假设长期存储许多小型二进制文件的开销较小,假设只有一些文件被定期修改,git 可以有效地处理对大型二进制文件的小更改吗?

假设无法完全避免使用二进制文件,所有事情都考虑了避免大型 git repo(因为对二进制文件进行编辑)的最佳选择是什么?

0 投票
2 回答
116 浏览

binary - 如何定量评估二进制的差异?

我知道一些二进制差异工具,如 VBinDiff 等。

目前我有大量的二进制文件,大约 500 个。

所以我正在寻找一种二进制工具来定量评估二进制文件的差异..

就像评估二进制 10 和二进制 100 的差异是 56%。二进制 50 和二进制 200 的差异是 78%。

有没有这样的工具?欢迎ELF和PE相关。

谢谢!

0 投票
4 回答
2954 浏览

android - 是否有任何适用于 android apk 的二进制差异工具专门用于 android apk 文件?

当试图在更新时减小apk文件大小时,有人建议使用bsdiff制作二进制补丁并在客户端合并补丁。但我认为这是一个常见的二进制差异工具,我们可以像chrome使用Courgette一样获得更小的补丁文件,它适用于exe文件并获得更小的补丁文件。

有没有类似的工具Courgette?如果没有,谷歌为什么不为我们的安卓开发者开发一些类似的工具呢?

0 投票
1 回答
760 浏览

c++ - 最大限度地减少调试信息的大小,以便在远程位置进行测试

我正在尝试创建一种将 C++ 项目的调试信息传输到远程位置进行测试的方法。在当前的开发周期中,对代码的微小更改需要传输整个二进制文件(大小为 100s MB,主要是调试信息)。

目前我解决这个问题的方法是使用 -gsplit-dwarf 将调试信息从目标文件中分离出来(没有调试信息的大小在我的连接上是可管理的),然后将调试文件与当前构建的副本进行比较遥控盒。

目的是为项目的调试文件提供一组补丁,以便可以在远程位置调试新代码。远程位置和本地计算机之间的连接速度很慢,因此最小化补丁的大小是最重要的,但它也应该与工具的运行时间相平衡。我已经将 bsdiff 和 xdelta 视为潜在的解决方案,并遇到了一个难题,其中 xdetla 速度快但太大而 bsdiff 在大小方面是完美的,但运行时间和内存要求比我想要的要高一点。

是否有我缺少的工具或方法,或者我只是以错误的方式解决这个问题?也许是 bsdiff 和 xdelta 的替代品?我知道像 gbdserver 这样的工具在这种情况下无法工作,因为我们在实际调试时有一些要求。bsdiff 的一些改变可以帮助提高性能吗?事实上,如果我使用的方法是合理的,那么在远程机器上保留构建副本以进行比较的好方法是什么。

0 投票
2 回答
1100 浏览

multithreading - 多线程二进制差异工具?

有很多二进制差异工具:

等等。它们很棒,但是是单线程的。是否可以在块上拆分大文件,同时找到块之间的差异,然后合并到最终的增量中?是否有任何其他工具、库可以在合理的时间内找到非常大的文件(数百 Gb)和 RAM 之间的差异?可能我可以自己实现算法,但找不到任何关于它的论文。

0 投票
2 回答
851 浏览

algorithm - 小二进制 blob 的二进制差异算法

有很多关于非常大文件(1MB+)的二进制差异算法的信息。但是,我的用例不同。这就是为什么它不是重复的。

我有许多对象的集合,每个对象都在 5-100 字节范围内。我想通过网络发送这些对象的更新。我想将更新编译成单独的 TCP 数据包(合理的 MTU 约为 1400)。我想在每个数据包中尝试尽可能多的更新:首先添加它们的 ID,然后将所有二进制对象的二进制差异组合起来。

用于此目的的最佳二进制差异算法是什么?