我将生成数 GB 文件的二进制增量。
天真地,我打算使用以下格式:
struct chunk {
uint64_t offset;
uint64_t length;
uint8_t data[];
};
struct delta {
uint8_t file_a_checksum[32]; // These are calculated while the
uint8_t file_b_checksum[32]; // gzipped chunks are being written
uint8_t chunks_checksum[32]; // at the 96 octet offset.
uint8_t gzipped_chunks[];
};
我只需要将这些增量应用于用于生成增量的原始 file_a
。
这里有什么我遗漏的吗?
是否有一种现有的二进制增量格式具有我正在寻找的功能,但不是太复杂?
最佳答案
对于任意二进制文件,使用通用工具当然是有意义的:
- 增量
- bspatch
- rdiff 备份 (rsync)
- 比较差异
(是的,git diff
适用于不受版本控制的文件。git diff --binary --no-index dir1/file.bin dir2/file.bin
)
在编写您自己的工具之前,我通常会推荐一个通用工具,即使有一点开销。虽然上面列表中的任何工具都无法以与“统一差异”格式一样普遍的格式生成二进制差异,但它们都是“接近于”标准工具。
还有一种可能与您相关的相当标准化的格式:简陋的 hexdump。 xxd
工具默认将二进制文件转储为相当标准的文本格式:
0000050: 2020 2020 5858 4428 3129 0a0a 0a0a 4e08 XXD(1)....N.
即偏移量后跟一系列字节值。确切的格式是灵活的,并且可以使用命令行开关进行配置。
但是,xxd
也可以在反向模式下使用以写入那些字节而不是转储它们。
因此,如果您有一个名为 patch.hexdump
的文件:
00000aa: bbccdd
然后运行 xxd -r patch.hexdump my.binary
将修改文件 my.binary
以修改偏移量 0xaa
处的三个字节。
最后,我还应该提到 dd
可以搜索二进制文件并读/写给定数量的字节,所以我猜你可以使用“shell script with dd
commands”作为你的补丁格式。
关于linux - 二进制差异是否有流行的 Linux/Unix 格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40068620/