`
cloudeagle_bupt
  • 浏览: 536529 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多
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


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics