您的位置:首页 > 其它

关于同一个文件两次调用CDC切片的结果不同的问题

2014-08-04 17:39 441 查看
package inputCompare;

import inputCompare.chunk.Chunk;
import inputCompare.chunk.TttdChunker;
import inputCompare.chunk.TttdChunker.TTTDEnumeration;
import java.io.File;
import java.io.IOException;

public class CdcCompare {

File file = null ;
public CdcCompare(File block) {
file = block ;
}

public static void main(String[] args) {
File part0 = new File("F:\\Graph\\blk_9213989683862805295");

CdcCompare sc = new CdcCompare(part0);
sc.run();

System.out.println("\n");

CdcCompare sc1 = new CdcCompare(part0);
sc1.run();
}

public void run() {
try {
TttdChunker chunker = new TttdChunker(1015);
TTTDEnumeration chunksEnum = (TTTDEnumeration) chunker.createChunks(file);
Chunk chunk = null ;

while (chunksEnum.hasMoreElements()) {
chunk = chunksEnum.nextElement();
System.out.println(chunk.getChecksum());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

代码如上,输出结果:

[B@6e3c9e46

[B@ba7089f

[B@32704b3

[B@76a58562

[B@6cd821c8

[B@6192094b

[B@3aa04cf8

[B@721d4bd9

[B@615ece16

[B@172c384b

[B@5823cfcf

[B@17204c3e

[B@3a153e9c

[B@48c1918e

[B@1c3b26f3

[B@6f7a29ff

[B@3d5b5d86

[B@395927e2

[B@c4983d8

[B@2e6ee035

[B@7141cf63

[B@1796a6ac

[B@2398724d

[B@6d782f7c

 理论上说两个文件内容一样的话,切片得来的各个分片的校验和应该大部分是相同的啊

  可是为啥会这样呢 
 非常奇怪, 请大家给指点下.

这里犯了一个低级错误: TMD!

System.out.println(byte[]);的话,
      调用byte[]对象直接打印的话,
  直接打印实际上调用的是toString()方法,而toString()的默认实现是打印对象类型+hashCode() 
  [B表示byte数组 
  @表示之后的是地址 
  后面跟着的是hashCode,其实就是其虚拟机地址 
  所以这个结果也就是顺理成章了.

正确的做法应该是:

     System.out.println("分片: " + new String(chunk.getChecksum()));

 参考: http://blog.csdn.net/hjm4702192/article/details/17073829
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐