[TL]对二进制diff&patch算法的实现感兴趣的进来

812 views
Skip to first unread message

Sisong Hou

unread,
Jun 7, 2013, 8:47:57 PM6/7/13
to pon...@googlegroups.com
我在github上开了一个项目: https://github.com/sisong/HDiffPatch

HDiffPatch是一个高效的diff/patch实现代码库,比bsdiff更快(只需1/4时间),占用的内存更小(2/3内存),更容易使用和集成,得到的diff结果压缩后也经常比bsdiff更小或相当(10%-20%)! 

diff部分用的C++实现,patch用的C实现; 现在的版本已经有几个实际使用案例(Windows,Andriod,嵌入式linux); 

下一步改进尝试思路我放在了issues里
你可以通过fork和pull request来提交新的改进;也可以只是review代码或做测试等;  


HaoPeiQiang

unread,
Jun 7, 2013, 9:02:37 PM6/7/13
to pongba
有点意思,问一个问题

如果一个zip包里面包含100个文件,其中一个文件改变了,然后重新打包。那么前后的两个zip包的内容用二进制diff的方法来看,是很接近的还是差异很大的?


2013/6/8 Sisong Hou <hous...@gmail.com>

--
 
---
您收到此邮件是因为您订阅了 Google 网上论坛的“TopLanguage”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 pongba+un...@googlegroups.com
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
 
 



--

xtaci

unread,
Jun 7, 2013, 9:31:54 PM6/7/13
to pon...@googlegroups.com
http://www.yinwang.org/blog-cn/2013/04/21/ydiff-%E7%BB%93%E6%9E%84%E5%8C%96%E7%9A%84%E7%A8%8B%E5%BA%8F%E6%AF%94%E8%BE%83/

王垠 写了这个ydiff,对比一下呢。

在 2013年6月8日星期六UTC+8上午8时47分57秒,HouS...@gmail.com写道:

Sisong Hou

unread,
Jun 7, 2013, 10:12:04 PM6/7/13
to pon...@googlegroups.com
zip包之间不能diff的 生成的差异数据很差 ;
diff的数据需要是未压缩的

HaoPeiQiang

unread,
Jun 7, 2013, 10:14:01 PM6/7/13
to pongba
嗯,那我建议做一个插件,先解压再来
我突然想起,貌似某家的增量更新是这么做的,google的?


2013/6/8 Sisong Hou <hous...@gmail.com>

Sisong Hou

unread,
Jun 7, 2013, 10:17:32 PM6/7/13
to pon...@googlegroups.com
浏览下ydiff; 目的是不一样的; ydiff适用于源代码之类的文本,跟踪其变化(添加\删除\移动等)
HDiff和bsdiff之内的是用于发布更小的补丁包的应用;适用于文本和二进制数据; 一般不是给人阅读的;



Sisong Hou

unread,
Jun 7, 2013, 10:19:19 PM6/7/13
to pon...@googlegroups.com
google用的bsdiff; 也针对可执行程序在开发一个特殊版本; 我上面的blog文章中也有提;

guolisen

unread,
Jun 7, 2013, 11:57:19 PM6/7/13
to pon...@googlegroups.com
速度和内存都是次要,关键是可靠性怎么样啊,目测也没有UT啊。。。速度虽然快但给人patch错了,换谁也不会用吧,呵呵
--
 
---
您收到此邮件是因为您订阅了 Google 网上论坛的“TopLanguage”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 pongba+unsub...@googlegroups.com
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
 
 


Sisong Hou

unread,
Jun 8, 2013, 12:06:38 AM6/8/13
to pon...@googlegroups.com
HDiffPatch/unit_test.cpp 就是一个简单的用例测试;
另外:diff函数生成的数据,调用patch函数就验证了;不可能存在发布会patch失败的补丁!



Reply all
Reply to author
Forward
0 new messages