源码分享-增量更新BSPatch算法的Java版实现

BSDiff是一个增量更新算法,它在服务器端运行BSDiff算法产生patch包。在客户端运行BSPatch算法,将旧文件和patch包合成新文件。增量更新在很多大型应用中是比较常见的一种技术,通过文件对比的方式来生成差分包。

bsdiff这个开源库连接:http://www.daemonology.net/bsdiff/

遍历搜索引擎,只发现BSPatch算法实现只有C语言源码,使得在Android等Java语言环境中,只能通过NDK的方式运行,非常不方便。

自己阅读了下BSPatch算法源码,发现并不复杂,完全可以用Java重新实现一下。另外吐槽一下,BSPatch算法的C语言源码main()主函数是真的好长,而且还用了err.h、fseeko、ftello这种windows上都没有的接口,难受。。。

以下为我实现的Java版BSPatch算法,并把函数拆分了一下,使得每个方法不超过40行,方便阅读。可直接调用

BSPatch.patch(oldPath, newPath, patchPath);

实现增量更新。源码依赖Apache的Commons Compress用以实现bzip2的解压,链接:http://commons.apache.org/proper/commons-compress/download_compress.cgi

import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.RandomAccessFile;

import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;

public class BSPatch {
    private RandomAccessFile mOld;
    private OutputStream mNew;
    private InputStream mPatch;

    // 以下3个数据仅在patch()内有效
    private InputStream bzCtrl;// 控制数据
    private InputStream bzData;// 差分数据
  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值