文件同步系统的java实现_基于rsync同步算法的文件同步系统JAVA实现(四)——分析并发送不匹配数据块...

作用:

利用不完整文件的校验块所构成的哈希表顺序查询完整文件的校验块,从而得出匹配情况,并返回不匹配数据块及其相应编号,当然还有一些控制信息。由于该过程比较复杂,所以最好设计一个数据报,便于客户端分析和重组文件。

数据报格式:

|IndexFlag(1字节)

|Index(4字节)

|Length(1字节)

|Buffer(可变,<=127)

|区别数据报种类

|记录校验块编号

|Buffer中所含的数据大小

|未匹配数据

基本思想:

按顺序读取完整文件中的数据块并得到校验块,按照建立的哈希表进行查询,若匹配(滚动和md4均匹配),则读取下一个数据块,若不匹配,则读取下一个字节(类似滑动窗口),并将先前头一个字节加入数据报中,再进行匹配分析。

注意点:

1. 数据报发送时机:数据报buffer字段满时,从不匹配到匹配时。

2. 发送数据报之前写入Length字段。

3. 结尾处理后,最好发送匹配的编号,对客户端重组有利。

4. 一些IO异常处理。

5. 发送时并不直接发送到socket的输出流中,而是先写入本地文件,因为某些缓冲和接受顺序原因。

6. 此部分较为复杂,可能有许多不合理的地方,需要不断完善。

源码:

public void startMatch(String filetotal, InputStream inStreamCheckSum,

OutputStream outStreamFIleBack, OutputStream outStreamMatchIndexs)

throws IOException {

BufferedInputStream inStreamFileTotal = new BufferedInputStream(

new FileInputStream(filetotal));

// BufferedOutputStream outStreamFIleBack = new BufferedOutputStream(

// outStreamBack);

// DataOutputStream outStreamMatchIndexs =

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值