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

来源:互联网 发布:网络作家榜 编辑:程序博客网 时间:2024/06/05 15:30
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


0 0
原创粉丝点击